changeset 28052:b29fed3c8834

merged with im.pidgin.pidgin
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Tue, 28 Jul 2009 18:48:17 +0900
parents f1ce91569ed3 (current diff) 06ec6e21da89 (diff)
children fd6f01a13e4d
files libpurple/plugin.c
diffstat 17 files changed, 4885 insertions(+), 1171 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Mon Jul 27 15:42:19 2009 +0900
+++ b/ChangeLog	Tue Jul 28 18:48:17 2009 +0900
@@ -10,7 +10,8 @@
 	  in a group on the buddy list.
 	* Removed the unmaintained and unneeded toc protocol plugin.
 	* Fixed NTLM authentication on big-endian systems.
-	* Various memory cleanups when unloading libpurple. (Nick Hebner)
+	* Various memory cleanups when unloading libpurple. (Nick Hebner and
+	  Stefan Becker)
 	* Report idle time 'From last message sent' should work properly.
 	* DNS servers are re-read when DNS queries fail in case the system has
 	  moved to a new network and the old servers are not accessible.
--- a/Makefile.mingw	Mon Jul 27 15:42:19 2009 +0900
+++ b/Makefile.mingw	Tue Jul 28 18:48:17 2009 +0900
@@ -73,7 +73,7 @@
 
 .PHONY: all docs install installer installer_nogtk installer_debug installers clean uninstall create_release_install_dir
 
-all: $(PIDGIN_CONFIG_H)
+all: $(PIDGIN_CONFIG_H) $(PIDGIN_REVISION_H)
 	$(MAKE) -C $(PURPLE_TOP) -f $(MINGW_MAKEFILE)
 	$(MAKE) -C $(PIDGIN_TOP) -f $(MINGW_MAKEFILE)
 ifndef DISABLE_NLS
@@ -125,7 +125,7 @@
 	$(MAKE) -C $(PIDGIN_TOP) -f $(MINGW_MAKEFILE) clean
 	$(MAKE) -C $(PURPLE_TOP) -f $(MINGW_MAKEFILE) clean
 	$(MAKE) -C share/ca-certs -f $(MINGW_MAKEFILE) clean
-	rm -f $(PIDGIN_CONFIG_H) ./VERSION pidgin-$(PIDGIN_VERSION)*.exe pidgin-$(PIDGIN_VERSION)-win32-bin.zip
+	rm -f $(PIDGIN_CONFIG_H) $(PIDGIN_REVISION_H) $(PIDGIN_REVISION_RAW_TXT) ./VERSION pidgin-$(PIDGIN_VERSION)*.exe pidgin-$(PIDGIN_VERSION)-win32-bin.zip
 	rm -rf doc/html Doxyfile.mingw
 
 uninstall:
--- a/libpurple/Makefile.am	Mon Jul 27 15:42:19 2009 +0900
+++ b/libpurple/Makefile.am	Tue Jul 28 18:48:17 2009 +0900
@@ -151,6 +151,7 @@
 	theme-manager.h \
 	upnp.h \
 	util.h \
+	valgrind.h \
 	value.h \
 	xmlnode.h \
 	whiteboard.h
@@ -273,7 +274,8 @@
 	$(dbus_sources)
 
 noinst_HEADERS= \
-	internal.h 
+	internal.h \
+	valgrind.h
 
 libpurpleincludedir=$(includedir)/libpurple
 libpurpleinclude_HEADERS = \
--- a/libpurple/accountopt.c	Mon Jul 27 15:42:19 2009 +0900
+++ b/libpurple/accountopt.c	Tue Jul 28 18:48:17 2009 +0900
@@ -111,6 +111,16 @@
 	return option;
 }
 
+static void
+purple_account_option_list_free(gpointer data, gpointer user_data)
+{
+	PurpleKeyValuePair *kvp = data;
+
+	g_free(kvp->value);
+	g_free(kvp->key);
+	g_free(kvp);
+}
+
 void
 purple_account_option_destroy(PurpleAccountOption *option)
 {
@@ -127,7 +137,7 @@
 	{
 		if (option->default_value.list != NULL)
 		{
-			g_list_foreach(option->default_value.list, (GFunc)g_free, NULL);
+			g_list_foreach(option->default_value.list, purple_account_option_list_free, NULL);
 			g_list_free(option->default_value.list);
 		}
 	}
@@ -183,7 +193,7 @@
 
 	if (option->default_value.list != NULL)
 	{
-		g_list_foreach(option->default_value.list, (GFunc)g_free, NULL);
+		g_list_foreach(option->default_value.list, purple_account_option_list_free, NULL);
 		g_list_free(option->default_value.list);
 	}
 
--- a/libpurple/blist.c	Mon Jul 27 15:42:19 2009 +0900
+++ b/libpurple/blist.c	Tue Jul 28 18:48:17 2009 +0900
@@ -2432,6 +2432,9 @@
 	hb.name = (gchar *)purple_normalize(account, name);
 
 	for (group = purplebuddylist->root; group; group = group->next) {
+		if (!group->child)
+			continue;
+
 		hb.group = group;
 		if ((buddy = g_hash_table_lookup(purplebuddylist->buddies, &hb))) {
 			return buddy;
@@ -2481,6 +2484,9 @@
 		hb.account = account;
 
 		for (node = purplebuddylist->root; node != NULL; node = node->next) {
+			if (!node->child)
+				continue;
+
 			hb.group = node;
 			if ((buddy = g_hash_table_lookup(purplebuddylist->buddies, &hb)) != NULL)
 				ret = g_slist_prepend(ret, buddy);
--- a/libpurple/media.c	Mon Jul 27 15:42:19 2009 +0900
+++ b/libpurple/media.c	Tue Jul 28 18:48:17 2009 +0900
@@ -156,7 +156,7 @@
 
 
 enum {
-	ERROR,
+	S_ERROR,
 	ACCEPTED,
 	CANDIDATES_PREPARED,
 	CODECS_CHANGED,
@@ -328,7 +328,7 @@
 			"Data the prpl plugin set on the media session.",
 			G_PARAM_READWRITE));
 
-	purple_media_signals[ERROR] = g_signal_new("error", G_TYPE_FROM_CLASS(klass),
+	purple_media_signals[S_ERROR] = g_signal_new("error", G_TYPE_FROM_CLASS(klass),
 					 G_SIGNAL_RUN_LAST, 0, NULL, NULL,
 					 g_cclosure_marshal_VOID__STRING,
 					 G_TYPE_NONE, 1, G_TYPE_STRING);
@@ -2110,7 +2110,7 @@
 	va_end(args);
 
 	purple_debug_error("media", "%s\n", message);
-	g_signal_emit(media, purple_media_signals[ERROR], 0, message);
+	g_signal_emit(media, purple_media_signals[S_ERROR], 0, message);
 
 	g_free(message);
 #endif
@@ -2729,7 +2729,8 @@
 		purple_debug_error("media",
 				"purple_media_add_remote_candidates: "
 				"couldn't find stream %s %s.\n",
-				sess_id, participant);
+				sess_id ? sess_id : "(null)",
+				participant ? participant : "(null)");
 		return;
 	}
 
--- a/libpurple/network.h	Mon Jul 27 15:42:19 2009 +0900
+++ b/libpurple/network.h	Tue Jul 28 18:48:17 2009 +0900
@@ -246,7 +246,7 @@
  * Update the TURN server IP given the host name
  * Will result in a DNS query being executed asynchronous
  * 
- * @param turn_server The host name of the STUN server to set
+ * @param turn_server The host name of the TURN server to set
  * @since 2.6.0
  */
 void purple_network_set_turn_server(const gchar *turn_server);
--- a/libpurple/plugin.c	Mon Jul 27 15:42:19 2009 +0900
+++ b/libpurple/plugin.c	Tue Jul 28 18:48:17 2009 +0900
@@ -33,6 +33,7 @@
 #include "request.h"
 #include "signals.h"
 #include "util.h"
+#include "valgrind.h"
 #include "version.h"
 
 typedef struct
@@ -875,7 +876,7 @@
 		 * it keeps all the plugins open, meaning that valgrind is able to
 		 * resolve symbol names in leak traces from plugins.
 		 */
-		if (!g_getenv("PURPLE_LEAKCHECK_HELP"))
+		if (!g_getenv("PURPLE_LEAKCHECK_HELP") && !RUNNING_ON_VALGRIND)
 		{
 			if (plugin->handle != NULL)
 				g_module_close(plugin->handle);
--- a/libpurple/protocols/jabber/jingle/rtp.c	Mon Jul 27 15:42:19 2009 +0900
+++ b/libpurple/protocols/jabber/jingle/rtp.c	Tue Jul 28 18:48:17 2009 +0900
@@ -457,7 +457,8 @@
 		gchar *sid, gchar *name, JingleSession *session)
 {
 	purple_debug_info("jingle-rtp", "state-changed: state %d "
-			"id: %s name: %s\n", state, sid, name);
+			"id: %s name: %s\n", state, sid ? sid : "(null)",
+			name ? name : "(null)");
 }
 
 static void
@@ -466,7 +467,8 @@
 		JingleSession *session)
 {
 	purple_debug_info("jingle-rtp", "stream-info: type %d "
-			"id: %s name: %s\n", type, sid, name);
+			"id: %s name: %s\n", type, sid ? sid : "(null)",
+			name ? name : "(null)");
 
 	g_return_if_fail(JINGLE_IS_SESSION(session));
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/valgrind.h	Tue Jul 28 18:48:17 2009 +0900
@@ -0,0 +1,3924 @@
+/* -*- c -*-
+   ----------------------------------------------------------------
+
+   Notice that the following BSD-style license applies to this one
+   file (valgrind.h) only.  The rest of Valgrind is licensed under the
+   terms of the GNU General Public License, version 2, unless
+   otherwise indicated.  See the COPYING file in the source
+   distribution for details.
+
+   ----------------------------------------------------------------
+
+   This file is part of Valgrind, a dynamic binary instrumentation
+   framework.
+
+   Copyright (C) 2000-2008 Julian Seward.  All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+   2. The origin of this software must not be misrepresented; you must 
+      not claim that you wrote the original software.  If you use this 
+      software in a product, an acknowledgment in the product 
+      documentation would be appreciated but is not required.
+
+   3. Altered source versions must be plainly marked as such, and must
+      not be misrepresented as being the original software.
+
+   4. The name of the author may not be used to endorse or promote 
+      products derived from this software without specific prior written 
+      permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+   OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+   ----------------------------------------------------------------
+
+   Notice that the above BSD-style license applies to this one file
+   (valgrind.h) only.  The entire rest of Valgrind is licensed under
+   the terms of the GNU General Public License, version 2.  See the
+   COPYING file in the source distribution for details.
+
+   ---------------------------------------------------------------- 
+*/
+
+
+/* This file is for inclusion into client (your!) code.
+
+   You can use these macros to manipulate and query Valgrind's 
+   execution inside your own programs.
+
+   The resulting executables will still run without Valgrind, just a
+   little bit more slowly than they otherwise would, but otherwise
+   unchanged.  When not running on valgrind, each client request
+   consumes very few (eg. 7) instructions, so the resulting performance
+   loss is negligible unless you plan to execute client requests
+   millions of times per second.  Nevertheless, if that is still a
+   problem, you can compile with the NVALGRIND symbol defined (gcc
+   -DNVALGRIND) so that client requests are not even compiled in.  */
+
+#ifndef __VALGRIND_H
+#define __VALGRIND_H
+
+#include <stdarg.h>
+
+/* Nb: this file might be included in a file compiled with -ansi.  So
+   we can't use C++ style "//" comments nor the "asm" keyword (instead
+   use "__asm__"). */
+
+/* Derive some tags indicating what the target platform is.  Note
+   that in this file we're using the compiler's CPP symbols for
+   identifying architectures, which are different to the ones we use
+   within the rest of Valgrind.  Note, __powerpc__ is active for both
+   32 and 64-bit PPC, whereas __powerpc64__ is only active for the
+   latter (on Linux, that is). */
+#undef PLAT_x86_linux
+#undef PLAT_amd64_linux
+#undef PLAT_ppc32_linux
+#undef PLAT_ppc64_linux
+#undef PLAT_ppc32_aix5
+#undef PLAT_ppc64_aix5
+
+#if !defined(_AIX) && defined(__i386__)
+#  define PLAT_x86_linux 1
+#elif !defined(_AIX) && defined(__x86_64__)
+#  define PLAT_amd64_linux 1
+#elif !defined(_AIX) && defined(__powerpc__) && !defined(__powerpc64__)
+#  define PLAT_ppc32_linux 1
+#elif !defined(_AIX) && defined(__powerpc__) && defined(__powerpc64__)
+#  define PLAT_ppc64_linux 1
+#elif defined(_AIX) && defined(__64BIT__)
+#  define PLAT_ppc64_aix5 1
+#elif defined(_AIX) && !defined(__64BIT__)
+#  define PLAT_ppc32_aix5 1
+#endif
+
+
+/* If we're not compiling for our target platform, don't generate
+   any inline asms.  */
+#if !defined(PLAT_x86_linux) && !defined(PLAT_amd64_linux) \
+    && !defined(PLAT_ppc32_linux) && !defined(PLAT_ppc64_linux) \
+    && !defined(PLAT_ppc32_aix5) && !defined(PLAT_ppc64_aix5)
+#  if !defined(NVALGRIND)
+#    define NVALGRIND 1
+#  endif
+#endif
+
+
+/* ------------------------------------------------------------------ */
+/* ARCHITECTURE SPECIFICS for SPECIAL INSTRUCTIONS.  There is nothing */
+/* in here of use to end-users -- skip to the next section.           */
+/* ------------------------------------------------------------------ */
+
+#if defined(NVALGRIND)
+
+/* Define NVALGRIND to completely remove the Valgrind magic sequence
+   from the compiled code (analogous to NDEBUG's effects on
+   assert()) */
+#define VALGRIND_DO_CLIENT_REQUEST(                               \
+        _zzq_rlval, _zzq_default, _zzq_request,                   \
+        _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)    \
+   {                                                              \
+      (_zzq_rlval) = (_zzq_default);                              \
+   }
+
+#else  /* ! NVALGRIND */
+
+/* The following defines the magic code sequences which the JITter
+   spots and handles magically.  Don't look too closely at them as
+   they will rot your brain.
+
+   The assembly code sequences for all architectures is in this one
+   file.  This is because this file must be stand-alone, and we don't
+   want to have multiple files.
+
+   For VALGRIND_DO_CLIENT_REQUEST, we must ensure that the default
+   value gets put in the return slot, so that everything works when
+   this is executed not under Valgrind.  Args are passed in a memory
+   block, and so there's no intrinsic limit to the number that could
+   be passed, but it's currently five.
+   
+   The macro args are: 
+      _zzq_rlval    result lvalue
+      _zzq_default  default value (result returned when running on real CPU)
+      _zzq_request  request code
+      _zzq_arg1..5  request params
+
+   The other two macros are used to support function wrapping, and are
+   a lot simpler.  VALGRIND_GET_NR_CONTEXT returns the value of the
+   guest's NRADDR pseudo-register and whatever other information is
+   needed to safely run the call original from the wrapper: on
+   ppc64-linux, the R2 value at the divert point is also needed.  This
+   information is abstracted into a user-visible type, OrigFn.
+
+   VALGRIND_CALL_NOREDIR_* behaves the same as the following on the
+   guest, but guarantees that the branch instruction will not be
+   redirected: x86: call *%eax, amd64: call *%rax, ppc32/ppc64:
+   branch-and-link-to-r11.  VALGRIND_CALL_NOREDIR is just text, not a
+   complete inline asm, since it needs to be combined with more magic
+   inline asm stuff to be useful.
+*/
+
+/* ------------------------- x86-linux ------------------------- */
+
+#if defined(PLAT_x86_linux)
+
+typedef
+   struct { 
+      unsigned int nraddr; /* where's the code? */
+   }
+   OrigFn;
+
+#define __SPECIAL_INSTRUCTION_PREAMBLE                            \
+                     "roll $3,  %%edi ; roll $13, %%edi\n\t"      \
+                     "roll $29, %%edi ; roll $19, %%edi\n\t"
+
+#define VALGRIND_DO_CLIENT_REQUEST(                               \
+        _zzq_rlval, _zzq_default, _zzq_request,                   \
+        _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)    \
+  { volatile unsigned int _zzq_args[6];                           \
+    volatile unsigned int _zzq_result;                            \
+    _zzq_args[0] = (unsigned int)(_zzq_request);                  \
+    _zzq_args[1] = (unsigned int)(_zzq_arg1);                     \
+    _zzq_args[2] = (unsigned int)(_zzq_arg2);                     \
+    _zzq_args[3] = (unsigned int)(_zzq_arg3);                     \
+    _zzq_args[4] = (unsigned int)(_zzq_arg4);                     \
+    _zzq_args[5] = (unsigned int)(_zzq_arg5);                     \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %EDX = client_request ( %EAX ) */         \
+                     "xchgl %%ebx,%%ebx"                          \
+                     : "=d" (_zzq_result)                         \
+                     : "a" (&_zzq_args[0]), "0" (_zzq_default)    \
+                     : "cc", "memory"                             \
+                    );                                            \
+    _zzq_rlval = _zzq_result;                                     \
+  }
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                       \
+  { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                   \
+    volatile unsigned int __addr;                                 \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %EAX = guest_NRADDR */                    \
+                     "xchgl %%ecx,%%ecx"                          \
+                     : "=a" (__addr)                              \
+                     :                                            \
+                     : "cc", "memory"                             \
+                    );                                            \
+    _zzq_orig->nraddr = __addr;                                   \
+  }
+
+#define VALGRIND_CALL_NOREDIR_EAX                                 \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* call-noredir *%EAX */                     \
+                     "xchgl %%edx,%%edx\n\t"
+#endif /* PLAT_x86_linux */
+
+/* ------------------------ amd64-linux ------------------------ */
+
+#if defined(PLAT_amd64_linux)
+
+typedef
+   struct { 
+      unsigned long long int nraddr; /* where's the code? */
+   }
+   OrigFn;
+
+#define __SPECIAL_INSTRUCTION_PREAMBLE                            \
+                     "rolq $3,  %%rdi ; rolq $13, %%rdi\n\t"      \
+                     "rolq $61, %%rdi ; rolq $51, %%rdi\n\t"
+
+#define VALGRIND_DO_CLIENT_REQUEST(                               \
+        _zzq_rlval, _zzq_default, _zzq_request,                   \
+        _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)    \
+  { volatile unsigned long long int _zzq_args[6];                 \
+    volatile unsigned long long int _zzq_result;                  \
+    _zzq_args[0] = (unsigned long long int)(_zzq_request);        \
+    _zzq_args[1] = (unsigned long long int)(_zzq_arg1);           \
+    _zzq_args[2] = (unsigned long long int)(_zzq_arg2);           \
+    _zzq_args[3] = (unsigned long long int)(_zzq_arg3);           \
+    _zzq_args[4] = (unsigned long long int)(_zzq_arg4);           \
+    _zzq_args[5] = (unsigned long long int)(_zzq_arg5);           \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %RDX = client_request ( %RAX ) */         \
+                     "xchgq %%rbx,%%rbx"                          \
+                     : "=d" (_zzq_result)                         \
+                     : "a" (&_zzq_args[0]), "0" (_zzq_default)    \
+                     : "cc", "memory"                             \
+                    );                                            \
+    _zzq_rlval = _zzq_result;                                     \
+  }
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                       \
+  { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                   \
+    volatile unsigned long long int __addr;                       \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %RAX = guest_NRADDR */                    \
+                     "xchgq %%rcx,%%rcx"                          \
+                     : "=a" (__addr)                              \
+                     :                                            \
+                     : "cc", "memory"                             \
+                    );                                            \
+    _zzq_orig->nraddr = __addr;                                   \
+  }
+
+#define VALGRIND_CALL_NOREDIR_RAX                                 \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* call-noredir *%RAX */                     \
+                     "xchgq %%rdx,%%rdx\n\t"
+#endif /* PLAT_amd64_linux */
+
+/* ------------------------ ppc32-linux ------------------------ */
+
+#if defined(PLAT_ppc32_linux)
+
+typedef
+   struct { 
+      unsigned int nraddr; /* where's the code? */
+   }
+   OrigFn;
+
+#define __SPECIAL_INSTRUCTION_PREAMBLE                            \
+                     "rlwinm 0,0,3,0,0  ; rlwinm 0,0,13,0,0\n\t"  \
+                     "rlwinm 0,0,29,0,0 ; rlwinm 0,0,19,0,0\n\t"
+
+#define VALGRIND_DO_CLIENT_REQUEST(                               \
+        _zzq_rlval, _zzq_default, _zzq_request,                   \
+        _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)    \
+                                                                  \
+  {          unsigned int  _zzq_args[6];                          \
+             unsigned int  _zzq_result;                           \
+             unsigned int* _zzq_ptr;                              \
+    _zzq_args[0] = (unsigned int)(_zzq_request);                  \
+    _zzq_args[1] = (unsigned int)(_zzq_arg1);                     \
+    _zzq_args[2] = (unsigned int)(_zzq_arg2);                     \
+    _zzq_args[3] = (unsigned int)(_zzq_arg3);                     \
+    _zzq_args[4] = (unsigned int)(_zzq_arg4);                     \
+    _zzq_args[5] = (unsigned int)(_zzq_arg5);                     \
+    _zzq_ptr = _zzq_args;                                         \
+    __asm__ volatile("mr 3,%1\n\t" /*default*/                    \
+                     "mr 4,%2\n\t" /*ptr*/                        \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = client_request ( %R4 ) */           \
+                     "or 1,1,1\n\t"                               \
+                     "mr %0,3"     /*result*/                     \
+                     : "=b" (_zzq_result)                         \
+                     : "b" (_zzq_default), "b" (_zzq_ptr)         \
+                     : "cc", "memory", "r3", "r4");               \
+    _zzq_rlval = _zzq_result;                                     \
+  }
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                       \
+  { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                   \
+    unsigned int __addr;                                          \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = guest_NRADDR */                     \
+                     "or 2,2,2\n\t"                               \
+                     "mr %0,3"                                    \
+                     : "=b" (__addr)                              \
+                     :                                            \
+                     : "cc", "memory", "r3"                       \
+                    );                                            \
+    _zzq_orig->nraddr = __addr;                                   \
+  }
+
+#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                   \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* branch-and-link-to-noredir *%R11 */       \
+                     "or 3,3,3\n\t"
+#endif /* PLAT_ppc32_linux */
+
+/* ------------------------ ppc64-linux ------------------------ */
+
+#if defined(PLAT_ppc64_linux)
+
+typedef
+   struct { 
+      unsigned long long int nraddr; /* where's the code? */
+      unsigned long long int r2;  /* what tocptr do we need? */
+   }
+   OrigFn;
+
+#define __SPECIAL_INSTRUCTION_PREAMBLE                            \
+                     "rotldi 0,0,3  ; rotldi 0,0,13\n\t"          \
+                     "rotldi 0,0,61 ; rotldi 0,0,51\n\t"
+
+#define VALGRIND_DO_CLIENT_REQUEST(                               \
+        _zzq_rlval, _zzq_default, _zzq_request,                   \
+        _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)    \
+                                                                  \
+  {          unsigned long long int  _zzq_args[6];                \
+    register unsigned long long int  _zzq_result __asm__("r3");   \
+    register unsigned long long int* _zzq_ptr __asm__("r4");      \
+    _zzq_args[0] = (unsigned long long int)(_zzq_request);        \
+    _zzq_args[1] = (unsigned long long int)(_zzq_arg1);           \
+    _zzq_args[2] = (unsigned long long int)(_zzq_arg2);           \
+    _zzq_args[3] = (unsigned long long int)(_zzq_arg3);           \
+    _zzq_args[4] = (unsigned long long int)(_zzq_arg4);           \
+    _zzq_args[5] = (unsigned long long int)(_zzq_arg5);           \
+    _zzq_ptr = _zzq_args;                                         \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = client_request ( %R4 ) */           \
+                     "or 1,1,1"                                   \
+                     : "=r" (_zzq_result)                         \
+                     : "0" (_zzq_default), "r" (_zzq_ptr)         \
+                     : "cc", "memory");                           \
+    _zzq_rlval = _zzq_result;                                     \
+  }
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                       \
+  { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                   \
+    register unsigned long long int __addr __asm__("r3");         \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = guest_NRADDR */                     \
+                     "or 2,2,2"                                   \
+                     : "=r" (__addr)                              \
+                     :                                            \
+                     : "cc", "memory"                             \
+                    );                                            \
+    _zzq_orig->nraddr = __addr;                                   \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = guest_NRADDR_GPR2 */                \
+                     "or 4,4,4"                                   \
+                     : "=r" (__addr)                              \
+                     :                                            \
+                     : "cc", "memory"                             \
+                    );                                            \
+    _zzq_orig->r2 = __addr;                                       \
+  }
+
+#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                   \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* branch-and-link-to-noredir *%R11 */       \
+                     "or 3,3,3\n\t"
+
+#endif /* PLAT_ppc64_linux */
+
+/* ------------------------ ppc32-aix5 ------------------------- */
+
+#if defined(PLAT_ppc32_aix5)
+
+typedef
+   struct { 
+      unsigned int nraddr; /* where's the code? */
+      unsigned int r2;  /* what tocptr do we need? */
+   }
+   OrigFn;
+
+#define __SPECIAL_INSTRUCTION_PREAMBLE                            \
+                     "rlwinm 0,0,3,0,0  ; rlwinm 0,0,13,0,0\n\t"  \
+                     "rlwinm 0,0,29,0,0 ; rlwinm 0,0,19,0,0\n\t"
+
+#define VALGRIND_DO_CLIENT_REQUEST(                               \
+        _zzq_rlval, _zzq_default, _zzq_request,                   \
+        _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)    \
+                                                                  \
+  {          unsigned int  _zzq_args[7];                          \
+    register unsigned int  _zzq_result;                           \
+    register unsigned int* _zzq_ptr;                              \
+    _zzq_args[0] = (unsigned int)(_zzq_request);                  \
+    _zzq_args[1] = (unsigned int)(_zzq_arg1);                     \
+    _zzq_args[2] = (unsigned int)(_zzq_arg2);                     \
+    _zzq_args[3] = (unsigned int)(_zzq_arg3);                     \
+    _zzq_args[4] = (unsigned int)(_zzq_arg4);                     \
+    _zzq_args[5] = (unsigned int)(_zzq_arg5);                     \
+    _zzq_args[6] = (unsigned int)(_zzq_default);                  \
+    _zzq_ptr = _zzq_args;                                         \
+    __asm__ volatile("mr 4,%1\n\t"                                \
+                     "lwz 3, 24(4)\n\t"                           \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = client_request ( %R4 ) */           \
+                     "or 1,1,1\n\t"                               \
+                     "mr %0,3"                                    \
+                     : "=b" (_zzq_result)                         \
+                     : "b" (_zzq_ptr)                             \
+                     : "r3", "r4", "cc", "memory");               \
+    _zzq_rlval = _zzq_result;                                     \
+  }
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                       \
+  { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                   \
+    register unsigned int __addr;                                 \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = guest_NRADDR */                     \
+                     "or 2,2,2\n\t"                               \
+                     "mr %0,3"                                    \
+                     : "=b" (__addr)                              \
+                     :                                            \
+                     : "r3", "cc", "memory"                       \
+                    );                                            \
+    _zzq_orig->nraddr = __addr;                                   \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = guest_NRADDR_GPR2 */                \
+                     "or 4,4,4\n\t"                               \
+                     "mr %0,3"                                    \
+                     : "=b" (__addr)                              \
+                     :                                            \
+                     : "r3", "cc", "memory"                       \
+                    );                                            \
+    _zzq_orig->r2 = __addr;                                       \
+  }
+
+#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                   \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* branch-and-link-to-noredir *%R11 */       \
+                     "or 3,3,3\n\t"
+
+#endif /* PLAT_ppc32_aix5 */
+
+/* ------------------------ ppc64-aix5 ------------------------- */
+
+#if defined(PLAT_ppc64_aix5)
+
+typedef
+   struct { 
+      unsigned long long int nraddr; /* where's the code? */
+      unsigned long long int r2;  /* what tocptr do we need? */
+   }
+   OrigFn;
+
+#define __SPECIAL_INSTRUCTION_PREAMBLE                            \
+                     "rotldi 0,0,3  ; rotldi 0,0,13\n\t"          \
+                     "rotldi 0,0,61 ; rotldi 0,0,51\n\t"
+
+#define VALGRIND_DO_CLIENT_REQUEST(                               \
+        _zzq_rlval, _zzq_default, _zzq_request,                   \
+        _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5)    \
+                                                                  \
+  {          unsigned long long int  _zzq_args[7];                \
+    register unsigned long long int  _zzq_result;                 \
+    register unsigned long long int* _zzq_ptr;                    \
+    _zzq_args[0] = (unsigned int long long)(_zzq_request);        \
+    _zzq_args[1] = (unsigned int long long)(_zzq_arg1);           \
+    _zzq_args[2] = (unsigned int long long)(_zzq_arg2);           \
+    _zzq_args[3] = (unsigned int long long)(_zzq_arg3);           \
+    _zzq_args[4] = (unsigned int long long)(_zzq_arg4);           \
+    _zzq_args[5] = (unsigned int long long)(_zzq_arg5);           \
+    _zzq_args[6] = (unsigned int long long)(_zzq_default);        \
+    _zzq_ptr = _zzq_args;                                         \
+    __asm__ volatile("mr 4,%1\n\t"                                \
+                     "ld 3, 48(4)\n\t"                            \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = client_request ( %R4 ) */           \
+                     "or 1,1,1\n\t"                               \
+                     "mr %0,3"                                    \
+                     : "=b" (_zzq_result)                         \
+                     : "b" (_zzq_ptr)                             \
+                     : "r3", "r4", "cc", "memory");               \
+    _zzq_rlval = _zzq_result;                                     \
+  }
+
+#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval)                       \
+  { volatile OrigFn* _zzq_orig = &(_zzq_rlval);                   \
+    register unsigned long long int __addr;                       \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = guest_NRADDR */                     \
+                     "or 2,2,2\n\t"                               \
+                     "mr %0,3"                                    \
+                     : "=b" (__addr)                              \
+                     :                                            \
+                     : "r3", "cc", "memory"                       \
+                    );                                            \
+    _zzq_orig->nraddr = __addr;                                   \
+    __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* %R3 = guest_NRADDR_GPR2 */                \
+                     "or 4,4,4\n\t"                               \
+                     "mr %0,3"                                    \
+                     : "=b" (__addr)                              \
+                     :                                            \
+                     : "r3", "cc", "memory"                       \
+                    );                                            \
+    _zzq_orig->r2 = __addr;                                       \
+  }
+
+#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                   \
+                     __SPECIAL_INSTRUCTION_PREAMBLE               \
+                     /* branch-and-link-to-noredir *%R11 */       \
+                     "or 3,3,3\n\t"
+
+#endif /* PLAT_ppc64_aix5 */
+
+/* Insert assembly code for other platforms here... */
+
+#endif /* NVALGRIND */
+
+
+/* ------------------------------------------------------------------ */
+/* PLATFORM SPECIFICS for FUNCTION WRAPPING.  This is all very        */
+/* ugly.  It's the least-worst tradeoff I can think of.               */
+/* ------------------------------------------------------------------ */
+
+/* This section defines magic (a.k.a appalling-hack) macros for doing
+   guaranteed-no-redirection macros, so as to get from function
+   wrappers to the functions they are wrapping.  The whole point is to
+   construct standard call sequences, but to do the call itself with a
+   special no-redirect call pseudo-instruction that the JIT
+   understands and handles specially.  This section is long and
+   repetitious, and I can't see a way to make it shorter.
+
+   The naming scheme is as follows:
+
+      CALL_FN_{W,v}_{v,W,WW,WWW,WWWW,5W,6W,7W,etc}
+
+   'W' stands for "word" and 'v' for "void".  Hence there are
+   different macros for calling arity 0, 1, 2, 3, 4, etc, functions,
+   and for each, the possibility of returning a word-typed result, or
+   no result.
+*/
+
+/* Use these to write the name of your wrapper.  NOTE: duplicates
+   VG_WRAP_FUNCTION_Z{U,Z} in pub_tool_redir.h. */
+
+#define I_WRAP_SONAME_FNNAME_ZU(soname,fnname)                    \
+   _vgwZU_##soname##_##fnname
+
+#define I_WRAP_SONAME_FNNAME_ZZ(soname,fnname)                    \
+   _vgwZZ_##soname##_##fnname
+
+/* Use this macro from within a wrapper function to collect the
+   context (address and possibly other info) of the original function.
+   Once you have that you can then use it in one of the CALL_FN_
+   macros.  The type of the argument _lval is OrigFn. */
+#define VALGRIND_GET_ORIG_FN(_lval)  VALGRIND_GET_NR_CONTEXT(_lval)
+
+/* Derivatives of the main macros below, for calling functions
+   returning void. */
+
+#define CALL_FN_v_v(fnptr)                                        \
+   do { volatile unsigned long _junk;                             \
+        CALL_FN_W_v(_junk,fnptr); } while (0)
+
+#define CALL_FN_v_W(fnptr, arg1)                                  \
+   do { volatile unsigned long _junk;                             \
+        CALL_FN_W_W(_junk,fnptr,arg1); } while (0)
+
+#define CALL_FN_v_WW(fnptr, arg1,arg2)                            \
+   do { volatile unsigned long _junk;                             \
+        CALL_FN_W_WW(_junk,fnptr,arg1,arg2); } while (0)
+
+#define CALL_FN_v_WWW(fnptr, arg1,arg2,arg3)                      \
+   do { volatile unsigned long _junk;                             \
+        CALL_FN_W_WWW(_junk,fnptr,arg1,arg2,arg3); } while (0)
+
+/* ------------------------- x86-linux ------------------------- */
+
+#if defined(PLAT_x86_linux)
+
+/* These regs are trashed by the hidden call.  No need to mention eax
+   as gcc can already see that, plus causes gcc to bomb. */
+#define __CALLER_SAVED_REGS /*"eax"*/ "ecx", "edx"
+
+/* These CALL_FN_ macros assume that on x86-linux, sizeof(unsigned
+   long) == 4. */
+
+#define CALL_FN_W_v(lval, orig)                                   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[1];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      __asm__ volatile(                                           \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_W(lval, orig, arg1)                             \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[2];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      __asm__ volatile(                                           \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         "addl $4, %%esp\n"                                       \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WW(lval, orig, arg1,arg2)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      __asm__ volatile(                                           \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         "addl $8, %%esp\n"                                       \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3)                 \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[4];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      __asm__ volatile(                                           \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         "addl $12, %%esp\n"                                      \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[5];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      __asm__ volatile(                                           \
+         "pushl 16(%%eax)\n\t"                                    \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         "addl $16, %%esp\n"                                      \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5)        \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[6];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      __asm__ volatile(                                           \
+         "pushl 20(%%eax)\n\t"                                    \
+         "pushl 16(%%eax)\n\t"                                    \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         "addl $20, %%esp\n"                                      \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6)   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[7];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      __asm__ volatile(                                           \
+         "pushl 24(%%eax)\n\t"                                    \
+         "pushl 20(%%eax)\n\t"                                    \
+         "pushl 16(%%eax)\n\t"                                    \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         "addl $24, %%esp\n"                                      \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7)                            \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[8];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      __asm__ volatile(                                           \
+         "pushl 28(%%eax)\n\t"                                    \
+         "pushl 24(%%eax)\n\t"                                    \
+         "pushl 20(%%eax)\n\t"                                    \
+         "pushl 16(%%eax)\n\t"                                    \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         "addl $28, %%esp\n"                                      \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[9];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      __asm__ volatile(                                           \
+         "pushl 32(%%eax)\n\t"                                    \
+         "pushl 28(%%eax)\n\t"                                    \
+         "pushl 24(%%eax)\n\t"                                    \
+         "pushl 20(%%eax)\n\t"                                    \
+         "pushl 16(%%eax)\n\t"                                    \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         "addl $32, %%esp\n"                                      \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8,arg9)                  \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[10];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      __asm__ volatile(                                           \
+         "pushl 36(%%eax)\n\t"                                    \
+         "pushl 32(%%eax)\n\t"                                    \
+         "pushl 28(%%eax)\n\t"                                    \
+         "pushl 24(%%eax)\n\t"                                    \
+         "pushl 20(%%eax)\n\t"                                    \
+         "pushl 16(%%eax)\n\t"                                    \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         "addl $36, %%esp\n"                                      \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[11];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      __asm__ volatile(                                           \
+         "pushl 40(%%eax)\n\t"                                    \
+         "pushl 36(%%eax)\n\t"                                    \
+         "pushl 32(%%eax)\n\t"                                    \
+         "pushl 28(%%eax)\n\t"                                    \
+         "pushl 24(%%eax)\n\t"                                    \
+         "pushl 20(%%eax)\n\t"                                    \
+         "pushl 16(%%eax)\n\t"                                    \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         "addl $40, %%esp\n"                                      \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,       \
+                                  arg6,arg7,arg8,arg9,arg10,      \
+                                  arg11)                          \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[12];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      _argvec[11] = (unsigned long)(arg11);                       \
+      __asm__ volatile(                                           \
+         "pushl 44(%%eax)\n\t"                                    \
+         "pushl 40(%%eax)\n\t"                                    \
+         "pushl 36(%%eax)\n\t"                                    \
+         "pushl 32(%%eax)\n\t"                                    \
+         "pushl 28(%%eax)\n\t"                                    \
+         "pushl 24(%%eax)\n\t"                                    \
+         "pushl 20(%%eax)\n\t"                                    \
+         "pushl 16(%%eax)\n\t"                                    \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         "addl $44, %%esp\n"                                      \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,       \
+                                  arg6,arg7,arg8,arg9,arg10,      \
+                                  arg11,arg12)                    \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[13];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      _argvec[11] = (unsigned long)(arg11);                       \
+      _argvec[12] = (unsigned long)(arg12);                       \
+      __asm__ volatile(                                           \
+         "pushl 48(%%eax)\n\t"                                    \
+         "pushl 44(%%eax)\n\t"                                    \
+         "pushl 40(%%eax)\n\t"                                    \
+         "pushl 36(%%eax)\n\t"                                    \
+         "pushl 32(%%eax)\n\t"                                    \
+         "pushl 28(%%eax)\n\t"                                    \
+         "pushl 24(%%eax)\n\t"                                    \
+         "pushl 20(%%eax)\n\t"                                    \
+         "pushl 16(%%eax)\n\t"                                    \
+         "pushl 12(%%eax)\n\t"                                    \
+         "pushl 8(%%eax)\n\t"                                     \
+         "pushl 4(%%eax)\n\t"                                     \
+         "movl (%%eax), %%eax\n\t"  /* target->%eax */            \
+         VALGRIND_CALL_NOREDIR_EAX                                \
+         "addl $48, %%esp\n"                                      \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#endif /* PLAT_x86_linux */
+
+/* ------------------------ amd64-linux ------------------------ */
+
+#if defined(PLAT_amd64_linux)
+
+/* ARGREGS: rdi rsi rdx rcx r8 r9 (the rest on stack in R-to-L order) */
+
+/* These regs are trashed by the hidden call. */
+#define __CALLER_SAVED_REGS /*"rax",*/ "rcx", "rdx", "rsi",       \
+                            "rdi", "r8", "r9", "r10", "r11"
+
+/* These CALL_FN_ macros assume that on amd64-linux, sizeof(unsigned
+   long) == 8. */
+
+/* NB 9 Sept 07.  There is a nasty kludge here in all these CALL_FN_
+   macros.  In order not to trash the stack redzone, we need to drop
+   %rsp by 128 before the hidden call, and restore afterwards.  The
+   nastyness is that it is only by luck that the stack still appears
+   to be unwindable during the hidden call - since then the behaviour
+   of any routine using this macro does not match what the CFI data
+   says.  Sigh.
+
+   Why is this important?  Imagine that a wrapper has a stack
+   allocated local, and passes to the hidden call, a pointer to it.
+   Because gcc does not know about the hidden call, it may allocate
+   that local in the redzone.  Unfortunately the hidden call may then
+   trash it before it comes to use it.  So we must step clear of the
+   redzone, for the duration of the hidden call, to make it safe.
+
+   Probably the same problem afflicts the other redzone-style ABIs too
+   (ppc64-linux, ppc32-aix5, ppc64-aix5); but for those, the stack is
+   self describing (none of this CFI nonsense) so at least messing
+   with the stack pointer doesn't give a danger of non-unwindable
+   stack. */
+
+#define CALL_FN_W_v(lval, orig)                                   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[1];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      __asm__ volatile(                                           \
+         "subq $128,%%rsp\n\t"                                    \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */            \
+         VALGRIND_CALL_NOREDIR_RAX                                \
+         "addq $128,%%rsp\n\t"                                    \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_W(lval, orig, arg1)                             \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[2];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      __asm__ volatile(                                           \
+         "subq $128,%%rsp\n\t"                                    \
+         "movq 8(%%rax), %%rdi\n\t"                               \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */            \
+         VALGRIND_CALL_NOREDIR_RAX                                \
+         "addq $128,%%rsp\n\t"                                    \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WW(lval, orig, arg1,arg2)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      __asm__ volatile(                                           \
+         "subq $128,%%rsp\n\t"                                    \
+         "movq 16(%%rax), %%rsi\n\t"                              \
+         "movq 8(%%rax), %%rdi\n\t"                               \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */            \
+         VALGRIND_CALL_NOREDIR_RAX                                \
+         "addq $128,%%rsp\n\t"                                    \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3)                 \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[4];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      __asm__ volatile(                                           \
+         "subq $128,%%rsp\n\t"                                    \
+         "movq 24(%%rax), %%rdx\n\t"                              \
+         "movq 16(%%rax), %%rsi\n\t"                              \
+         "movq 8(%%rax), %%rdi\n\t"                               \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */            \
+         VALGRIND_CALL_NOREDIR_RAX                                \
+         "addq $128,%%rsp\n\t"                                    \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[5];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      __asm__ volatile(                                           \
+         "subq $128,%%rsp\n\t"                                    \
+         "movq 32(%%rax), %%rcx\n\t"                              \
+         "movq 24(%%rax), %%rdx\n\t"                              \
+         "movq 16(%%rax), %%rsi\n\t"                              \
+         "movq 8(%%rax), %%rdi\n\t"                               \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */            \
+         VALGRIND_CALL_NOREDIR_RAX                                \
+         "addq $128,%%rsp\n\t"                                    \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5)        \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[6];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      __asm__ volatile(                                           \
+         "subq $128,%%rsp\n\t"                                    \
+         "movq 40(%%rax), %%r8\n\t"                               \
+         "movq 32(%%rax), %%rcx\n\t"                              \
+         "movq 24(%%rax), %%rdx\n\t"                              \
+         "movq 16(%%rax), %%rsi\n\t"                              \
+         "movq 8(%%rax), %%rdi\n\t"                               \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */            \
+         VALGRIND_CALL_NOREDIR_RAX                                \
+         "addq $128,%%rsp\n\t"                                    \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6)   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[7];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      __asm__ volatile(                                           \
+         "subq $128,%%rsp\n\t"                                    \
+         "movq 48(%%rax), %%r9\n\t"                               \
+         "movq 40(%%rax), %%r8\n\t"                               \
+         "movq 32(%%rax), %%rcx\n\t"                              \
+         "movq 24(%%rax), %%rdx\n\t"                              \
+         "movq 16(%%rax), %%rsi\n\t"                              \
+         "movq 8(%%rax), %%rdi\n\t"                               \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */            \
+         "addq $128,%%rsp\n\t"                                    \
+         VALGRIND_CALL_NOREDIR_RAX                                \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7)                            \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[8];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      __asm__ volatile(                                           \
+         "subq $128,%%rsp\n\t"                                    \
+         "pushq 56(%%rax)\n\t"                                    \
+         "movq 48(%%rax), %%r9\n\t"                               \
+         "movq 40(%%rax), %%r8\n\t"                               \
+         "movq 32(%%rax), %%rcx\n\t"                              \
+         "movq 24(%%rax), %%rdx\n\t"                              \
+         "movq 16(%%rax), %%rsi\n\t"                              \
+         "movq 8(%%rax), %%rdi\n\t"                               \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */            \
+         VALGRIND_CALL_NOREDIR_RAX                                \
+         "addq $8, %%rsp\n"                                       \
+         "addq $128,%%rsp\n\t"                                    \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[9];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      __asm__ volatile(                                           \
+         "subq $128,%%rsp\n\t"                                    \
+         "pushq 64(%%rax)\n\t"                                    \
+         "pushq 56(%%rax)\n\t"                                    \
+         "movq 48(%%rax), %%r9\n\t"                               \
+         "movq 40(%%rax), %%r8\n\t"                               \
+         "movq 32(%%rax), %%rcx\n\t"                              \
+         "movq 24(%%rax), %%rdx\n\t"                              \
+         "movq 16(%%rax), %%rsi\n\t"                              \
+         "movq 8(%%rax), %%rdi\n\t"                               \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */            \
+         VALGRIND_CALL_NOREDIR_RAX                                \
+         "addq $16, %%rsp\n"                                      \
+         "addq $128,%%rsp\n\t"                                    \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8,arg9)                  \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[10];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      __asm__ volatile(                                           \
+         "subq $128,%%rsp\n\t"                                    \
+         "pushq 72(%%rax)\n\t"                                    \
+         "pushq 64(%%rax)\n\t"                                    \
+         "pushq 56(%%rax)\n\t"                                    \
+         "movq 48(%%rax), %%r9\n\t"                               \
+         "movq 40(%%rax), %%r8\n\t"                               \
+         "movq 32(%%rax), %%rcx\n\t"                              \
+         "movq 24(%%rax), %%rdx\n\t"                              \
+         "movq 16(%%rax), %%rsi\n\t"                              \
+         "movq 8(%%rax), %%rdi\n\t"                               \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */            \
+         VALGRIND_CALL_NOREDIR_RAX                                \
+         "addq $24, %%rsp\n"                                      \
+         "addq $128,%%rsp\n\t"                                    \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[11];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      __asm__ volatile(                                           \
+         "subq $128,%%rsp\n\t"                                    \
+         "pushq 80(%%rax)\n\t"                                    \
+         "pushq 72(%%rax)\n\t"                                    \
+         "pushq 64(%%rax)\n\t"                                    \
+         "pushq 56(%%rax)\n\t"                                    \
+         "movq 48(%%rax), %%r9\n\t"                               \
+         "movq 40(%%rax), %%r8\n\t"                               \
+         "movq 32(%%rax), %%rcx\n\t"                              \
+         "movq 24(%%rax), %%rdx\n\t"                              \
+         "movq 16(%%rax), %%rsi\n\t"                              \
+         "movq 8(%%rax), %%rdi\n\t"                               \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */            \
+         VALGRIND_CALL_NOREDIR_RAX                                \
+         "addq $32, %%rsp\n"                                      \
+         "addq $128,%%rsp\n\t"                                    \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10,arg11)     \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[12];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      _argvec[11] = (unsigned long)(arg11);                       \
+      __asm__ volatile(                                           \
+         "subq $128,%%rsp\n\t"                                    \
+         "pushq 88(%%rax)\n\t"                                    \
+         "pushq 80(%%rax)\n\t"                                    \
+         "pushq 72(%%rax)\n\t"                                    \
+         "pushq 64(%%rax)\n\t"                                    \
+         "pushq 56(%%rax)\n\t"                                    \
+         "movq 48(%%rax), %%r9\n\t"                               \
+         "movq 40(%%rax), %%r8\n\t"                               \
+         "movq 32(%%rax), %%rcx\n\t"                              \
+         "movq 24(%%rax), %%rdx\n\t"                              \
+         "movq 16(%%rax), %%rsi\n\t"                              \
+         "movq 8(%%rax), %%rdi\n\t"                               \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */            \
+         VALGRIND_CALL_NOREDIR_RAX                                \
+         "addq $40, %%rsp\n"                                      \
+         "addq $128,%%rsp\n\t"                                    \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                arg7,arg8,arg9,arg10,arg11,arg12) \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[13];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)(arg1);                         \
+      _argvec[2] = (unsigned long)(arg2);                         \
+      _argvec[3] = (unsigned long)(arg3);                         \
+      _argvec[4] = (unsigned long)(arg4);                         \
+      _argvec[5] = (unsigned long)(arg5);                         \
+      _argvec[6] = (unsigned long)(arg6);                         \
+      _argvec[7] = (unsigned long)(arg7);                         \
+      _argvec[8] = (unsigned long)(arg8);                         \
+      _argvec[9] = (unsigned long)(arg9);                         \
+      _argvec[10] = (unsigned long)(arg10);                       \
+      _argvec[11] = (unsigned long)(arg11);                       \
+      _argvec[12] = (unsigned long)(arg12);                       \
+      __asm__ volatile(                                           \
+         "subq $128,%%rsp\n\t"                                    \
+         "pushq 96(%%rax)\n\t"                                    \
+         "pushq 88(%%rax)\n\t"                                    \
+         "pushq 80(%%rax)\n\t"                                    \
+         "pushq 72(%%rax)\n\t"                                    \
+         "pushq 64(%%rax)\n\t"                                    \
+         "pushq 56(%%rax)\n\t"                                    \
+         "movq 48(%%rax), %%r9\n\t"                               \
+         "movq 40(%%rax), %%r8\n\t"                               \
+         "movq 32(%%rax), %%rcx\n\t"                              \
+         "movq 24(%%rax), %%rdx\n\t"                              \
+         "movq 16(%%rax), %%rsi\n\t"                              \
+         "movq 8(%%rax), %%rdi\n\t"                               \
+         "movq (%%rax), %%rax\n\t"  /* target->%rax */            \
+         VALGRIND_CALL_NOREDIR_RAX                                \
+         "addq $48, %%rsp\n"                                      \
+         "addq $128,%%rsp\n\t"                                    \
+         : /*out*/   "=a" (_res)                                  \
+         : /*in*/    "a" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#endif /* PLAT_amd64_linux */
+
+/* ------------------------ ppc32-linux ------------------------ */
+
+#if defined(PLAT_ppc32_linux)
+
+/* This is useful for finding out about the on-stack stuff:
+
+   extern int f9  ( int,int,int,int,int,int,int,int,int );
+   extern int f10 ( int,int,int,int,int,int,int,int,int,int );
+   extern int f11 ( int,int,int,int,int,int,int,int,int,int,int );
+   extern int f12 ( int,int,int,int,int,int,int,int,int,int,int,int );
+
+   int g9 ( void ) {
+      return f9(11,22,33,44,55,66,77,88,99);
+   }
+   int g10 ( void ) {
+      return f10(11,22,33,44,55,66,77,88,99,110);
+   }
+   int g11 ( void ) {
+      return f11(11,22,33,44,55,66,77,88,99,110,121);
+   }
+   int g12 ( void ) {
+      return f12(11,22,33,44,55,66,77,88,99,110,121,132);
+   }
+*/
+
+/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */
+
+/* These regs are trashed by the hidden call. */
+#define __CALLER_SAVED_REGS                                       \
+   "lr", "ctr", "xer",                                            \
+   "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7",        \
+   "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",   \
+   "r11", "r12", "r13"
+
+/* These CALL_FN_ macros assume that on ppc32-linux, 
+   sizeof(unsigned long) == 4. */
+
+#define CALL_FN_W_v(lval, orig)                                   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[1];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_W(lval, orig, arg1)                             \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[2];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WW(lval, orig, arg1,arg2)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3)                 \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[4];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[5];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      _argvec[4] = (unsigned long)arg4;                           \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 6,16(11)\n\t"  /* arg4->r6 */                       \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5)        \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[6];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      _argvec[4] = (unsigned long)arg4;                           \
+      _argvec[5] = (unsigned long)arg5;                           \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 6,16(11)\n\t"  /* arg4->r6 */                       \
+         "lwz 7,20(11)\n\t"                                       \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6)   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[7];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      _argvec[4] = (unsigned long)arg4;                           \
+      _argvec[5] = (unsigned long)arg5;                           \
+      _argvec[6] = (unsigned long)arg6;                           \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 6,16(11)\n\t"  /* arg4->r6 */                       \
+         "lwz 7,20(11)\n\t"                                       \
+         "lwz 8,24(11)\n\t"                                       \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7)                            \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[8];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      _argvec[4] = (unsigned long)arg4;                           \
+      _argvec[5] = (unsigned long)arg5;                           \
+      _argvec[6] = (unsigned long)arg6;                           \
+      _argvec[7] = (unsigned long)arg7;                           \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 6,16(11)\n\t"  /* arg4->r6 */                       \
+         "lwz 7,20(11)\n\t"                                       \
+         "lwz 8,24(11)\n\t"                                       \
+         "lwz 9,28(11)\n\t"                                       \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[9];                          \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      _argvec[4] = (unsigned long)arg4;                           \
+      _argvec[5] = (unsigned long)arg5;                           \
+      _argvec[6] = (unsigned long)arg6;                           \
+      _argvec[7] = (unsigned long)arg7;                           \
+      _argvec[8] = (unsigned long)arg8;                           \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 6,16(11)\n\t"  /* arg4->r6 */                       \
+         "lwz 7,20(11)\n\t"                                       \
+         "lwz 8,24(11)\n\t"                                       \
+         "lwz 9,28(11)\n\t"                                       \
+         "lwz 10,32(11)\n\t" /* arg8->r10 */                      \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8,arg9)                  \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[10];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      _argvec[4] = (unsigned long)arg4;                           \
+      _argvec[5] = (unsigned long)arg5;                           \
+      _argvec[6] = (unsigned long)arg6;                           \
+      _argvec[7] = (unsigned long)arg7;                           \
+      _argvec[8] = (unsigned long)arg8;                           \
+      _argvec[9] = (unsigned long)arg9;                           \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "addi 1,1,-16\n\t"                                       \
+         /* arg9 */                                               \
+         "lwz 3,36(11)\n\t"                                       \
+         "stw 3,8(1)\n\t"                                         \
+         /* args1-8 */                                            \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 6,16(11)\n\t"  /* arg4->r6 */                       \
+         "lwz 7,20(11)\n\t"                                       \
+         "lwz 8,24(11)\n\t"                                       \
+         "lwz 9,28(11)\n\t"                                       \
+         "lwz 10,32(11)\n\t" /* arg8->r10 */                      \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "addi 1,1,16\n\t"                                        \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[11];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      _argvec[4] = (unsigned long)arg4;                           \
+      _argvec[5] = (unsigned long)arg5;                           \
+      _argvec[6] = (unsigned long)arg6;                           \
+      _argvec[7] = (unsigned long)arg7;                           \
+      _argvec[8] = (unsigned long)arg8;                           \
+      _argvec[9] = (unsigned long)arg9;                           \
+      _argvec[10] = (unsigned long)arg10;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "addi 1,1,-16\n\t"                                       \
+         /* arg10 */                                              \
+         "lwz 3,40(11)\n\t"                                       \
+         "stw 3,12(1)\n\t"                                        \
+         /* arg9 */                                               \
+         "lwz 3,36(11)\n\t"                                       \
+         "stw 3,8(1)\n\t"                                         \
+         /* args1-8 */                                            \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 6,16(11)\n\t"  /* arg4->r6 */                       \
+         "lwz 7,20(11)\n\t"                                       \
+         "lwz 8,24(11)\n\t"                                       \
+         "lwz 9,28(11)\n\t"                                       \
+         "lwz 10,32(11)\n\t" /* arg8->r10 */                      \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "addi 1,1,16\n\t"                                        \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10,arg11)     \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[12];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      _argvec[4] = (unsigned long)arg4;                           \
+      _argvec[5] = (unsigned long)arg5;                           \
+      _argvec[6] = (unsigned long)arg6;                           \
+      _argvec[7] = (unsigned long)arg7;                           \
+      _argvec[8] = (unsigned long)arg8;                           \
+      _argvec[9] = (unsigned long)arg9;                           \
+      _argvec[10] = (unsigned long)arg10;                         \
+      _argvec[11] = (unsigned long)arg11;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "addi 1,1,-32\n\t"                                       \
+         /* arg11 */                                              \
+         "lwz 3,44(11)\n\t"                                       \
+         "stw 3,16(1)\n\t"                                        \
+         /* arg10 */                                              \
+         "lwz 3,40(11)\n\t"                                       \
+         "stw 3,12(1)\n\t"                                        \
+         /* arg9 */                                               \
+         "lwz 3,36(11)\n\t"                                       \
+         "stw 3,8(1)\n\t"                                         \
+         /* args1-8 */                                            \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 6,16(11)\n\t"  /* arg4->r6 */                       \
+         "lwz 7,20(11)\n\t"                                       \
+         "lwz 8,24(11)\n\t"                                       \
+         "lwz 9,28(11)\n\t"                                       \
+         "lwz 10,32(11)\n\t" /* arg8->r10 */                      \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "addi 1,1,32\n\t"                                        \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                arg7,arg8,arg9,arg10,arg11,arg12) \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[13];                         \
+      volatile unsigned long _res;                                \
+      _argvec[0] = (unsigned long)_orig.nraddr;                   \
+      _argvec[1] = (unsigned long)arg1;                           \
+      _argvec[2] = (unsigned long)arg2;                           \
+      _argvec[3] = (unsigned long)arg3;                           \
+      _argvec[4] = (unsigned long)arg4;                           \
+      _argvec[5] = (unsigned long)arg5;                           \
+      _argvec[6] = (unsigned long)arg6;                           \
+      _argvec[7] = (unsigned long)arg7;                           \
+      _argvec[8] = (unsigned long)arg8;                           \
+      _argvec[9] = (unsigned long)arg9;                           \
+      _argvec[10] = (unsigned long)arg10;                         \
+      _argvec[11] = (unsigned long)arg11;                         \
+      _argvec[12] = (unsigned long)arg12;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "addi 1,1,-32\n\t"                                       \
+         /* arg12 */                                              \
+         "lwz 3,48(11)\n\t"                                       \
+         "stw 3,20(1)\n\t"                                        \
+         /* arg11 */                                              \
+         "lwz 3,44(11)\n\t"                                       \
+         "stw 3,16(1)\n\t"                                        \
+         /* arg10 */                                              \
+         "lwz 3,40(11)\n\t"                                       \
+         "stw 3,12(1)\n\t"                                        \
+         /* arg9 */                                               \
+         "lwz 3,36(11)\n\t"                                       \
+         "stw 3,8(1)\n\t"                                         \
+         /* args1-8 */                                            \
+         "lwz 3,4(11)\n\t"   /* arg1->r3 */                       \
+         "lwz 4,8(11)\n\t"                                        \
+         "lwz 5,12(11)\n\t"                                       \
+         "lwz 6,16(11)\n\t"  /* arg4->r6 */                       \
+         "lwz 7,20(11)\n\t"                                       \
+         "lwz 8,24(11)\n\t"                                       \
+         "lwz 9,28(11)\n\t"                                       \
+         "lwz 10,32(11)\n\t" /* arg8->r10 */                      \
+         "lwz 11,0(11)\n\t"  /* target->r11 */                    \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "addi 1,1,32\n\t"                                        \
+         "mr %0,3"                                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[0])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#endif /* PLAT_ppc32_linux */
+
+/* ------------------------ ppc64-linux ------------------------ */
+
+#if defined(PLAT_ppc64_linux)
+
+/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */
+
+/* These regs are trashed by the hidden call. */
+#define __CALLER_SAVED_REGS                                       \
+   "lr", "ctr", "xer",                                            \
+   "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7",        \
+   "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",   \
+   "r11", "r12", "r13"
+
+/* These CALL_FN_ macros assume that on ppc64-linux, sizeof(unsigned
+   long) == 8. */
+
+#define CALL_FN_W_v(lval, orig)                                   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+0];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1] = (unsigned long)_orig.r2;                       \
+      _argvec[2] = (unsigned long)_orig.nraddr;                   \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)" /* restore tocptr */                      \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_W(lval, orig, arg1)                             \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+1];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)" /* restore tocptr */                      \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WW(lval, orig, arg1,arg2)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+2];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)" /* restore tocptr */                      \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3)                 \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+3];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)" /* restore tocptr */                      \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+4];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)" /* restore tocptr */                      \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5)        \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+5];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)" /* restore tocptr */                      \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6)   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+6];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)" /* restore tocptr */                      \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7)                            \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+7];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(11)\n\t" /* arg7->r9 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)" /* restore tocptr */                      \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+8];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(11)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(11)\n\t" /* arg8->r10 */                     \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)" /* restore tocptr */                      \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8,arg9)                  \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+9];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "addi 1,1,-128\n\t"  /* expand stack frame */            \
+         /* arg9 */                                               \
+         "ld  3,72(11)\n\t"                                       \
+         "std 3,112(1)\n\t"                                       \
+         /* args1-8 */                                            \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(11)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(11)\n\t" /* arg8->r10 */                     \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         "addi 1,1,128"     /* restore frame */                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+10];                       \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      _argvec[2+10] = (unsigned long)arg10;                       \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "addi 1,1,-128\n\t"  /* expand stack frame */            \
+         /* arg10 */                                              \
+         "ld  3,80(11)\n\t"                                       \
+         "std 3,120(1)\n\t"                                       \
+         /* arg9 */                                               \
+         "ld  3,72(11)\n\t"                                       \
+         "std 3,112(1)\n\t"                                       \
+         /* args1-8 */                                            \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(11)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(11)\n\t" /* arg8->r10 */                     \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         "addi 1,1,128"     /* restore frame */                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10,arg11)     \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+11];                       \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      _argvec[2+10] = (unsigned long)arg10;                       \
+      _argvec[2+11] = (unsigned long)arg11;                       \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "addi 1,1,-144\n\t"  /* expand stack frame */            \
+         /* arg11 */                                              \
+         "ld  3,88(11)\n\t"                                       \
+         "std 3,128(1)\n\t"                                       \
+         /* arg10 */                                              \
+         "ld  3,80(11)\n\t"                                       \
+         "std 3,120(1)\n\t"                                       \
+         /* arg9 */                                               \
+         "ld  3,72(11)\n\t"                                       \
+         "std 3,112(1)\n\t"                                       \
+         /* args1-8 */                                            \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(11)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(11)\n\t" /* arg8->r10 */                     \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         "addi 1,1,144"     /* restore frame */                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                arg7,arg8,arg9,arg10,arg11,arg12) \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+12];                       \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      _argvec[2+10] = (unsigned long)arg10;                       \
+      _argvec[2+11] = (unsigned long)arg11;                       \
+      _argvec[2+12] = (unsigned long)arg12;                       \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         "std 2,-16(11)\n\t"  /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "addi 1,1,-144\n\t"  /* expand stack frame */            \
+         /* arg12 */                                              \
+         "ld  3,96(11)\n\t"                                       \
+         "std 3,136(1)\n\t"                                       \
+         /* arg11 */                                              \
+         "ld  3,88(11)\n\t"                                       \
+         "std 3,128(1)\n\t"                                       \
+         /* arg10 */                                              \
+         "ld  3,80(11)\n\t"                                       \
+         "std 3,120(1)\n\t"                                       \
+         /* arg9 */                                               \
+         "ld  3,72(11)\n\t"                                       \
+         "std 3,112(1)\n\t"                                       \
+         /* args1-8 */                                            \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(11)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(11)\n\t" /* arg8->r10 */                     \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         "addi 1,1,144"     /* restore frame */                   \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#endif /* PLAT_ppc64_linux */
+
+/* ------------------------ ppc32-aix5 ------------------------- */
+
+#if defined(PLAT_ppc32_aix5)
+
+/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */
+
+/* These regs are trashed by the hidden call. */
+#define __CALLER_SAVED_REGS                                       \
+   "lr", "ctr", "xer",                                            \
+   "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7",        \
+   "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",   \
+   "r11", "r12", "r13"
+
+/* Expand the stack frame, copying enough info that unwinding
+   still works.  Trashes r3. */
+
+#define VG_EXPAND_FRAME_BY_trashes_r3(_n_fr)                      \
+         "addi 1,1,-" #_n_fr "\n\t"                               \
+         "lwz  3," #_n_fr "(1)\n\t"                               \
+         "stw  3,0(1)\n\t"
+
+#define VG_CONTRACT_FRAME_BY(_n_fr)                               \
+         "addi 1,1," #_n_fr "\n\t"
+
+/* These CALL_FN_ macros assume that on ppc32-aix5, sizeof(unsigned
+   long) == 4. */
+
+#define CALL_FN_W_v(lval, orig)                                   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+0];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1] = (unsigned long)_orig.r2;                       \
+      _argvec[2] = (unsigned long)_orig.nraddr;                   \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "stw  2,-8(11)\n\t"  /* save tocptr */                   \
+         "lwz  2,-4(11)\n\t"  /* use nraddr's tocptr */           \
+         "lwz 11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "lwz 2,-8(11)\n\t" /* restore tocptr */                  \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_W(lval, orig, arg1)                             \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+1];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "stw  2,-8(11)\n\t"  /* save tocptr */                   \
+         "lwz  2,-4(11)\n\t"  /* use nraddr's tocptr */           \
+         "lwz  3, 4(11)\n\t"  /* arg1->r3 */                      \
+         "lwz 11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "lwz 2,-8(11)\n\t" /* restore tocptr */                  \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WW(lval, orig, arg1,arg2)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+2];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "stw  2,-8(11)\n\t"  /* save tocptr */                   \
+         "lwz  2,-4(11)\n\t"  /* use nraddr's tocptr */           \
+         "lwz  3, 4(11)\n\t"  /* arg1->r3 */                      \
+         "lwz  4, 8(11)\n\t"  /* arg2->r4 */                      \
+         "lwz 11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "lwz 2,-8(11)\n\t" /* restore tocptr */                  \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3)                 \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+3];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "stw  2,-8(11)\n\t"  /* save tocptr */                   \
+         "lwz  2,-4(11)\n\t"  /* use nraddr's tocptr */           \
+         "lwz  3, 4(11)\n\t"  /* arg1->r3 */                      \
+         "lwz  4, 8(11)\n\t"  /* arg2->r4 */                      \
+         "lwz  5, 12(11)\n\t" /* arg3->r5 */                      \
+         "lwz 11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "lwz 2,-8(11)\n\t" /* restore tocptr */                  \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+4];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "stw  2,-8(11)\n\t"  /* save tocptr */                   \
+         "lwz  2,-4(11)\n\t"  /* use nraddr's tocptr */           \
+         "lwz  3, 4(11)\n\t"  /* arg1->r3 */                      \
+         "lwz  4, 8(11)\n\t"  /* arg2->r4 */                      \
+         "lwz  5, 12(11)\n\t" /* arg3->r5 */                      \
+         "lwz  6, 16(11)\n\t" /* arg4->r6 */                      \
+         "lwz 11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "lwz 2,-8(11)\n\t" /* restore tocptr */                  \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5)        \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+5];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "stw  2,-8(11)\n\t"  /* save tocptr */                   \
+         "lwz  2,-4(11)\n\t"  /* use nraddr's tocptr */           \
+         "lwz  3, 4(11)\n\t"  /* arg1->r3 */                      \
+         "lwz  4, 8(11)\n\t" /* arg2->r4 */                       \
+         "lwz  5, 12(11)\n\t" /* arg3->r5 */                      \
+         "lwz  6, 16(11)\n\t" /* arg4->r6 */                      \
+         "lwz  7, 20(11)\n\t" /* arg5->r7 */                      \
+         "lwz 11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "lwz 2,-8(11)\n\t" /* restore tocptr */                  \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6)   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+6];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "stw  2,-8(11)\n\t"  /* save tocptr */                   \
+         "lwz  2,-4(11)\n\t"  /* use nraddr's tocptr */           \
+         "lwz  3, 4(11)\n\t"  /* arg1->r3 */                      \
+         "lwz  4, 8(11)\n\t"  /* arg2->r4 */                      \
+         "lwz  5, 12(11)\n\t" /* arg3->r5 */                      \
+         "lwz  6, 16(11)\n\t" /* arg4->r6 */                      \
+         "lwz  7, 20(11)\n\t" /* arg5->r7 */                      \
+         "lwz  8, 24(11)\n\t" /* arg6->r8 */                      \
+         "lwz 11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "lwz 2,-8(11)\n\t" /* restore tocptr */                  \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7)                            \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+7];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "stw  2,-8(11)\n\t"  /* save tocptr */                   \
+         "lwz  2,-4(11)\n\t"  /* use nraddr's tocptr */           \
+         "lwz  3, 4(11)\n\t"  /* arg1->r3 */                      \
+         "lwz  4, 8(11)\n\t"  /* arg2->r4 */                      \
+         "lwz  5, 12(11)\n\t" /* arg3->r5 */                      \
+         "lwz  6, 16(11)\n\t" /* arg4->r6 */                      \
+         "lwz  7, 20(11)\n\t" /* arg5->r7 */                      \
+         "lwz  8, 24(11)\n\t" /* arg6->r8 */                      \
+         "lwz  9, 28(11)\n\t" /* arg7->r9 */                      \
+         "lwz 11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "lwz 2,-8(11)\n\t" /* restore tocptr */                  \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+8];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "stw  2,-8(11)\n\t"  /* save tocptr */                   \
+         "lwz  2,-4(11)\n\t"  /* use nraddr's tocptr */           \
+         "lwz  3, 4(11)\n\t"  /* arg1->r3 */                      \
+         "lwz  4, 8(11)\n\t"  /* arg2->r4 */                      \
+         "lwz  5, 12(11)\n\t" /* arg3->r5 */                      \
+         "lwz  6, 16(11)\n\t" /* arg4->r6 */                      \
+         "lwz  7, 20(11)\n\t" /* arg5->r7 */                      \
+         "lwz  8, 24(11)\n\t" /* arg6->r8 */                      \
+         "lwz  9, 28(11)\n\t" /* arg7->r9 */                      \
+         "lwz 10, 32(11)\n\t" /* arg8->r10 */                     \
+         "lwz 11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "lwz 2,-8(11)\n\t" /* restore tocptr */                  \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8,arg9)                  \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+9];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "stw  2,-8(11)\n\t"  /* save tocptr */                   \
+         "lwz  2,-4(11)\n\t"  /* use nraddr's tocptr */           \
+         VG_EXPAND_FRAME_BY_trashes_r3(64)                        \
+         /* arg9 */                                               \
+         "lwz 3,36(11)\n\t"                                       \
+         "stw 3,56(1)\n\t"                                        \
+         /* args1-8 */                                            \
+         "lwz  3, 4(11)\n\t"  /* arg1->r3 */                      \
+         "lwz  4, 8(11)\n\t"  /* arg2->r4 */                      \
+         "lwz  5, 12(11)\n\t" /* arg3->r5 */                      \
+         "lwz  6, 16(11)\n\t" /* arg4->r6 */                      \
+         "lwz  7, 20(11)\n\t" /* arg5->r7 */                      \
+         "lwz  8, 24(11)\n\t" /* arg6->r8 */                      \
+         "lwz  9, 28(11)\n\t" /* arg7->r9 */                      \
+         "lwz 10, 32(11)\n\t" /* arg8->r10 */                     \
+         "lwz 11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "lwz 2,-8(11)\n\t" /* restore tocptr */                  \
+         VG_CONTRACT_FRAME_BY(64)                                 \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+10];                       \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      _argvec[2+10] = (unsigned long)arg10;                       \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "stw  2,-8(11)\n\t"  /* save tocptr */                   \
+         "lwz  2,-4(11)\n\t"  /* use nraddr's tocptr */           \
+         VG_EXPAND_FRAME_BY_trashes_r3(64)                        \
+         /* arg10 */                                              \
+         "lwz 3,40(11)\n\t"                                       \
+         "stw 3,60(1)\n\t"                                        \
+         /* arg9 */                                               \
+         "lwz 3,36(11)\n\t"                                       \
+         "stw 3,56(1)\n\t"                                        \
+         /* args1-8 */                                            \
+         "lwz  3, 4(11)\n\t"  /* arg1->r3 */                      \
+         "lwz  4, 8(11)\n\t"  /* arg2->r4 */                      \
+         "lwz  5, 12(11)\n\t" /* arg3->r5 */                      \
+         "lwz  6, 16(11)\n\t" /* arg4->r6 */                      \
+         "lwz  7, 20(11)\n\t" /* arg5->r7 */                      \
+         "lwz  8, 24(11)\n\t" /* arg6->r8 */                      \
+         "lwz  9, 28(11)\n\t" /* arg7->r9 */                      \
+         "lwz 10, 32(11)\n\t" /* arg8->r10 */                     \
+         "lwz 11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "lwz 2,-8(11)\n\t" /* restore tocptr */                  \
+         VG_CONTRACT_FRAME_BY(64)                                 \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10,arg11)     \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+11];                       \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      _argvec[2+10] = (unsigned long)arg10;                       \
+      _argvec[2+11] = (unsigned long)arg11;                       \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "stw  2,-8(11)\n\t"  /* save tocptr */                   \
+         "lwz  2,-4(11)\n\t"  /* use nraddr's tocptr */           \
+         VG_EXPAND_FRAME_BY_trashes_r3(72)                        \
+         /* arg11 */                                              \
+         "lwz 3,44(11)\n\t"                                       \
+         "stw 3,64(1)\n\t"                                        \
+         /* arg10 */                                              \
+         "lwz 3,40(11)\n\t"                                       \
+         "stw 3,60(1)\n\t"                                        \
+         /* arg9 */                                               \
+         "lwz 3,36(11)\n\t"                                       \
+         "stw 3,56(1)\n\t"                                        \
+         /* args1-8 */                                            \
+         "lwz  3, 4(11)\n\t"  /* arg1->r3 */                      \
+         "lwz  4, 8(11)\n\t"  /* arg2->r4 */                      \
+         "lwz  5, 12(11)\n\t" /* arg3->r5 */                      \
+         "lwz  6, 16(11)\n\t" /* arg4->r6 */                      \
+         "lwz  7, 20(11)\n\t" /* arg5->r7 */                      \
+         "lwz  8, 24(11)\n\t" /* arg6->r8 */                      \
+         "lwz  9, 28(11)\n\t" /* arg7->r9 */                      \
+         "lwz 10, 32(11)\n\t" /* arg8->r10 */                     \
+         "lwz 11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "lwz 2,-8(11)\n\t" /* restore tocptr */                  \
+         VG_CONTRACT_FRAME_BY(72)                                 \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                arg7,arg8,arg9,arg10,arg11,arg12) \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+12];                       \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      _argvec[2+10] = (unsigned long)arg10;                       \
+      _argvec[2+11] = (unsigned long)arg11;                       \
+      _argvec[2+12] = (unsigned long)arg12;                       \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "stw  2,-8(11)\n\t"  /* save tocptr */                   \
+         "lwz  2,-4(11)\n\t"  /* use nraddr's tocptr */           \
+         VG_EXPAND_FRAME_BY_trashes_r3(72)                        \
+         /* arg12 */                                              \
+         "lwz 3,48(11)\n\t"                                       \
+         "stw 3,68(1)\n\t"                                        \
+         /* arg11 */                                              \
+         "lwz 3,44(11)\n\t"                                       \
+         "stw 3,64(1)\n\t"                                        \
+         /* arg10 */                                              \
+         "lwz 3,40(11)\n\t"                                       \
+         "stw 3,60(1)\n\t"                                        \
+         /* arg9 */                                               \
+         "lwz 3,36(11)\n\t"                                       \
+         "stw 3,56(1)\n\t"                                        \
+         /* args1-8 */                                            \
+         "lwz  3, 4(11)\n\t"  /* arg1->r3 */                      \
+         "lwz  4, 8(11)\n\t"  /* arg2->r4 */                      \
+         "lwz  5, 12(11)\n\t" /* arg3->r5 */                      \
+         "lwz  6, 16(11)\n\t" /* arg4->r6 */                      \
+         "lwz  7, 20(11)\n\t" /* arg5->r7 */                      \
+         "lwz  8, 24(11)\n\t" /* arg6->r8 */                      \
+         "lwz  9, 28(11)\n\t" /* arg7->r9 */                      \
+         "lwz 10, 32(11)\n\t" /* arg8->r10 */                     \
+         "lwz 11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "lwz 2,-8(11)\n\t" /* restore tocptr */                  \
+         VG_CONTRACT_FRAME_BY(72)                                 \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#endif /* PLAT_ppc32_aix5 */
+
+/* ------------------------ ppc64-aix5 ------------------------- */
+
+#if defined(PLAT_ppc64_aix5)
+
+/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */
+
+/* These regs are trashed by the hidden call. */
+#define __CALLER_SAVED_REGS                                       \
+   "lr", "ctr", "xer",                                            \
+   "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7",        \
+   "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",   \
+   "r11", "r12", "r13"
+
+/* Expand the stack frame, copying enough info that unwinding
+   still works.  Trashes r3. */
+
+#define VG_EXPAND_FRAME_BY_trashes_r3(_n_fr)                      \
+         "addi 1,1,-" #_n_fr "\n\t"                               \
+         "ld   3," #_n_fr "(1)\n\t"                               \
+         "std  3,0(1)\n\t"
+
+#define VG_CONTRACT_FRAME_BY(_n_fr)                               \
+         "addi 1,1," #_n_fr "\n\t"
+
+/* These CALL_FN_ macros assume that on ppc64-aix5, sizeof(unsigned
+   long) == 8. */
+
+#define CALL_FN_W_v(lval, orig)                                   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+0];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1] = (unsigned long)_orig.r2;                       \
+      _argvec[2] = (unsigned long)_orig.nraddr;                   \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "std  2,-16(11)\n\t" /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_W(lval, orig, arg1)                             \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+1];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "std  2,-16(11)\n\t" /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld 2,-16(11)\n\t" /* restore tocptr */                  \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WW(lval, orig, arg1,arg2)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+2];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "std  2,-16(11)\n\t" /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld  2,-16(11)\n\t" /* restore tocptr */                 \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3)                 \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+3];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "std  2,-16(11)\n\t" /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld  2,-16(11)\n\t" /* restore tocptr */                 \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+4];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "std  2,-16(11)\n\t" /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld  2,-16(11)\n\t" /* restore tocptr */                 \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5)        \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+5];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "std  2,-16(11)\n\t" /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld  2,-16(11)\n\t" /* restore tocptr */                 \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6)   \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+6];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "std  2,-16(11)\n\t" /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld  2,-16(11)\n\t" /* restore tocptr */                 \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7)                            \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+7];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "std  2,-16(11)\n\t" /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(11)\n\t" /* arg7->r9 */                      \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld  2,-16(11)\n\t" /* restore tocptr */                 \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8)                       \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+8];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "std  2,-16(11)\n\t" /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(11)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(11)\n\t" /* arg8->r10 */                     \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld  2,-16(11)\n\t" /* restore tocptr */                 \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,   \
+                                 arg7,arg8,arg9)                  \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+9];                        \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "std  2,-16(11)\n\t" /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         VG_EXPAND_FRAME_BY_trashes_r3(128)                       \
+         /* arg9 */                                               \
+         "ld  3,72(11)\n\t"                                       \
+         "std 3,112(1)\n\t"                                       \
+         /* args1-8 */                                            \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(11)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(11)\n\t" /* arg8->r10 */                     \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld  2,-16(11)\n\t" /* restore tocptr */                 \
+         VG_CONTRACT_FRAME_BY(128)                                \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10)           \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+10];                       \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      _argvec[2+10] = (unsigned long)arg10;                       \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "std  2,-16(11)\n\t" /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         VG_EXPAND_FRAME_BY_trashes_r3(128)                       \
+         /* arg10 */                                              \
+         "ld  3,80(11)\n\t"                                       \
+         "std 3,120(1)\n\t"                                       \
+         /* arg9 */                                               \
+         "ld  3,72(11)\n\t"                                       \
+         "std 3,112(1)\n\t"                                       \
+         /* args1-8 */                                            \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(11)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(11)\n\t" /* arg8->r10 */                     \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld  2,-16(11)\n\t" /* restore tocptr */                 \
+         VG_CONTRACT_FRAME_BY(128)                                \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                  arg7,arg8,arg9,arg10,arg11)     \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+11];                       \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      _argvec[2+10] = (unsigned long)arg10;                       \
+      _argvec[2+11] = (unsigned long)arg11;                       \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "std  2,-16(11)\n\t" /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         VG_EXPAND_FRAME_BY_trashes_r3(144)                       \
+         /* arg11 */                                              \
+         "ld  3,88(11)\n\t"                                       \
+         "std 3,128(1)\n\t"                                       \
+         /* arg10 */                                              \
+         "ld  3,80(11)\n\t"                                       \
+         "std 3,120(1)\n\t"                                       \
+         /* arg9 */                                               \
+         "ld  3,72(11)\n\t"                                       \
+         "std 3,112(1)\n\t"                                       \
+         /* args1-8 */                                            \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(11)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(11)\n\t" /* arg8->r10 */                     \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld  2,-16(11)\n\t" /* restore tocptr */                 \
+         VG_CONTRACT_FRAME_BY(144)                                \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6,  \
+                                arg7,arg8,arg9,arg10,arg11,arg12) \
+   do {                                                           \
+      volatile OrigFn        _orig = (orig);                      \
+      volatile unsigned long _argvec[3+12];                       \
+      volatile unsigned long _res;                                \
+      /* _argvec[0] holds current r2 across the call */           \
+      _argvec[1]   = (unsigned long)_orig.r2;                     \
+      _argvec[2]   = (unsigned long)_orig.nraddr;                 \
+      _argvec[2+1] = (unsigned long)arg1;                         \
+      _argvec[2+2] = (unsigned long)arg2;                         \
+      _argvec[2+3] = (unsigned long)arg3;                         \
+      _argvec[2+4] = (unsigned long)arg4;                         \
+      _argvec[2+5] = (unsigned long)arg5;                         \
+      _argvec[2+6] = (unsigned long)arg6;                         \
+      _argvec[2+7] = (unsigned long)arg7;                         \
+      _argvec[2+8] = (unsigned long)arg8;                         \
+      _argvec[2+9] = (unsigned long)arg9;                         \
+      _argvec[2+10] = (unsigned long)arg10;                       \
+      _argvec[2+11] = (unsigned long)arg11;                       \
+      _argvec[2+12] = (unsigned long)arg12;                       \
+      __asm__ volatile(                                           \
+         "mr 11,%1\n\t"                                           \
+         VG_EXPAND_FRAME_BY_trashes_r3(512)                       \
+         "std  2,-16(11)\n\t" /* save tocptr */                   \
+         "ld   2,-8(11)\n\t"  /* use nraddr's tocptr */           \
+         VG_EXPAND_FRAME_BY_trashes_r3(144)                       \
+         /* arg12 */                                              \
+         "ld  3,96(11)\n\t"                                       \
+         "std 3,136(1)\n\t"                                       \
+         /* arg11 */                                              \
+         "ld  3,88(11)\n\t"                                       \
+         "std 3,128(1)\n\t"                                       \
+         /* arg10 */                                              \
+         "ld  3,80(11)\n\t"                                       \
+         "std 3,120(1)\n\t"                                       \
+         /* arg9 */                                               \
+         "ld  3,72(11)\n\t"                                       \
+         "std 3,112(1)\n\t"                                       \
+         /* args1-8 */                                            \
+         "ld   3, 8(11)\n\t"  /* arg1->r3 */                      \
+         "ld   4, 16(11)\n\t" /* arg2->r4 */                      \
+         "ld   5, 24(11)\n\t" /* arg3->r5 */                      \
+         "ld   6, 32(11)\n\t" /* arg4->r6 */                      \
+         "ld   7, 40(11)\n\t" /* arg5->r7 */                      \
+         "ld   8, 48(11)\n\t" /* arg6->r8 */                      \
+         "ld   9, 56(11)\n\t" /* arg7->r9 */                      \
+         "ld  10, 64(11)\n\t" /* arg8->r10 */                     \
+         "ld  11, 0(11)\n\t"  /* target->r11 */                   \
+         VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11                  \
+         "mr 11,%1\n\t"                                           \
+         "mr %0,3\n\t"                                            \
+         "ld  2,-16(11)\n\t" /* restore tocptr */                 \
+         VG_CONTRACT_FRAME_BY(144)                                \
+         VG_CONTRACT_FRAME_BY(512)                                \
+         : /*out*/   "=r" (_res)                                  \
+         : /*in*/    "r" (&_argvec[2])                            \
+         : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS          \
+      );                                                          \
+      lval = (__typeof__(lval)) _res;                             \
+   } while (0)
+
+#endif /* PLAT_ppc64_aix5 */
+
+
+/* ------------------------------------------------------------------ */
+/* ARCHITECTURE INDEPENDENT MACROS for CLIENT REQUESTS.               */
+/*                                                                    */
+/* ------------------------------------------------------------------ */
+
+/* Some request codes.  There are many more of these, but most are not
+   exposed to end-user view.  These are the public ones, all of the
+   form 0x1000 + small_number.
+
+   Core ones are in the range 0x00000000--0x0000ffff.  The non-public
+   ones start at 0x2000.
+*/
+
+/* These macros are used by tools -- they must be public, but don't
+   embed them into other programs. */
+#define VG_USERREQ_TOOL_BASE(a,b) \
+   ((unsigned int)(((a)&0xff) << 24 | ((b)&0xff) << 16))
+#define VG_IS_TOOL_USERREQ(a, b, v) \
+   (VG_USERREQ_TOOL_BASE(a,b) == ((v) & 0xffff0000))
+
+/* !! ABIWARNING !! ABIWARNING !! ABIWARNING !! ABIWARNING !! 
+   This enum comprises an ABI exported by Valgrind to programs
+   which use client requests.  DO NOT CHANGE THE ORDER OF THESE
+   ENTRIES, NOR DELETE ANY -- add new ones at the end. */
+typedef
+   enum { VG_USERREQ__RUNNING_ON_VALGRIND  = 0x1001,
+          VG_USERREQ__DISCARD_TRANSLATIONS = 0x1002,
+
+          /* These allow any function to be called from the simulated
+             CPU but run on the real CPU.  Nb: the first arg passed to
+             the function is always the ThreadId of the running
+             thread!  So CLIENT_CALL0 actually requires a 1 arg
+             function, etc. */
+          VG_USERREQ__CLIENT_CALL0 = 0x1101,
+          VG_USERREQ__CLIENT_CALL1 = 0x1102,
+          VG_USERREQ__CLIENT_CALL2 = 0x1103,
+          VG_USERREQ__CLIENT_CALL3 = 0x1104,
+
+          /* Can be useful in regression testing suites -- eg. can
+             send Valgrind's output to /dev/null and still count
+             errors. */
+          VG_USERREQ__COUNT_ERRORS = 0x1201,
+
+          /* These are useful and can be interpreted by any tool that
+             tracks malloc() et al, by using vg_replace_malloc.c. */
+          VG_USERREQ__MALLOCLIKE_BLOCK = 0x1301,
+          VG_USERREQ__FREELIKE_BLOCK   = 0x1302,
+          /* Memory pool support. */
+          VG_USERREQ__CREATE_MEMPOOL   = 0x1303,
+          VG_USERREQ__DESTROY_MEMPOOL  = 0x1304,
+          VG_USERREQ__MEMPOOL_ALLOC    = 0x1305,
+          VG_USERREQ__MEMPOOL_FREE     = 0x1306,
+          VG_USERREQ__MEMPOOL_TRIM     = 0x1307,
+          VG_USERREQ__MOVE_MEMPOOL     = 0x1308,
+          VG_USERREQ__MEMPOOL_CHANGE   = 0x1309,
+          VG_USERREQ__MEMPOOL_EXISTS   = 0x130a,
+
+          /* Allow printfs to valgrind log. */
+          VG_USERREQ__PRINTF           = 0x1401,
+          VG_USERREQ__PRINTF_BACKTRACE = 0x1402,
+
+          /* Stack support. */
+          VG_USERREQ__STACK_REGISTER   = 0x1501,
+          VG_USERREQ__STACK_DEREGISTER = 0x1502,
+          VG_USERREQ__STACK_CHANGE     = 0x1503
+   } Vg_ClientRequest;
+
+#if !defined(__GNUC__)
+#  define __extension__ /* */
+#endif
+
+/* Returns the number of Valgrinds this code is running under.  That
+   is, 0 if running natively, 1 if running under Valgrind, 2 if
+   running under Valgrind which is running under another Valgrind,
+   etc. */
+#define RUNNING_ON_VALGRIND  __extension__                        \
+   ({unsigned int _qzz_res;                                       \
+    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0 /* if not */,          \
+                               VG_USERREQ__RUNNING_ON_VALGRIND,   \
+                               0, 0, 0, 0, 0);                    \
+    _qzz_res;                                                     \
+   })
+
+
+/* Discard translation of code in the range [_qzz_addr .. _qzz_addr +
+   _qzz_len - 1].  Useful if you are debugging a JITter or some such,
+   since it provides a way to make sure valgrind will retranslate the
+   invalidated area.  Returns no value. */
+#define VALGRIND_DISCARD_TRANSLATIONS(_qzz_addr,_qzz_len)         \
+   {unsigned int _qzz_res;                                        \
+    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                       \
+                               VG_USERREQ__DISCARD_TRANSLATIONS,  \
+                               _qzz_addr, _qzz_len, 0, 0, 0);     \
+   }
+
+
+/* These requests are for getting Valgrind itself to print something.
+   Possibly with a backtrace.  This is a really ugly hack. */
+
+#if defined(NVALGRIND)
+
+#  define VALGRIND_PRINTF(...)
+#  define VALGRIND_PRINTF_BACKTRACE(...)
+
+#else /* NVALGRIND */
+
+/* Modern GCC will optimize the static routine out if unused,
+   and unused attribute will shut down warnings about it.  */
+static int VALGRIND_PRINTF(const char *format, ...)
+   __attribute__((format(__printf__, 1, 2), __unused__));
+static int
+VALGRIND_PRINTF(const char *format, ...)
+{
+   unsigned long _qzz_res;
+   va_list vargs;
+   va_start(vargs, format);
+   VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, VG_USERREQ__PRINTF,
+                              (unsigned long)format, (unsigned long)vargs, 
+                              0, 0, 0);
+   va_end(vargs);
+   return (int)_qzz_res;
+}
+
+static int VALGRIND_PRINTF_BACKTRACE(const char *format, ...)
+   __attribute__((format(__printf__, 1, 2), __unused__));
+static int
+VALGRIND_PRINTF_BACKTRACE(const char *format, ...)
+{
+   unsigned long _qzz_res;
+   va_list vargs;
+   va_start(vargs, format);
+   VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, VG_USERREQ__PRINTF_BACKTRACE,
+                              (unsigned long)format, (unsigned long)vargs, 
+                              0, 0, 0);
+   va_end(vargs);
+   return (int)_qzz_res;
+}
+
+#endif /* NVALGRIND */
+
+
+/* These requests allow control to move from the simulated CPU to the
+   real CPU, calling an arbitary function.
+   
+   Note that the current ThreadId is inserted as the first argument.
+   So this call:
+
+     VALGRIND_NON_SIMD_CALL2(f, arg1, arg2)
+
+   requires f to have this signature:
+
+     Word f(Word tid, Word arg1, Word arg2)
+
+   where "Word" is a word-sized type.
+
+   Note that these client requests are not entirely reliable.  For example,
+   if you call a function with them that subsequently calls printf(),
+   there's a high chance Valgrind will crash.  Generally, your prospects of
+   these working are made higher if the called function does not refer to
+   any global variables, and does not refer to any libc or other functions
+   (printf et al).  Any kind of entanglement with libc or dynamic linking is
+   likely to have a bad outcome, for tricky reasons which we've grappled
+   with a lot in the past.
+*/
+#define VALGRIND_NON_SIMD_CALL0(_qyy_fn)                          \
+   __extension__                                                  \
+   ({unsigned long _qyy_res;                                      \
+    VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */,  \
+                               VG_USERREQ__CLIENT_CALL0,          \
+                               _qyy_fn,                           \
+                               0, 0, 0, 0);                       \
+    _qyy_res;                                                     \
+   })
+
+#define VALGRIND_NON_SIMD_CALL1(_qyy_fn, _qyy_arg1)               \
+   __extension__                                                  \
+   ({unsigned long _qyy_res;                                      \
+    VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */,  \
+                               VG_USERREQ__CLIENT_CALL1,          \
+                               _qyy_fn,                           \
+                               _qyy_arg1, 0, 0, 0);               \
+    _qyy_res;                                                     \
+   })
+
+#define VALGRIND_NON_SIMD_CALL2(_qyy_fn, _qyy_arg1, _qyy_arg2)    \
+   __extension__                                                  \
+   ({unsigned long _qyy_res;                                      \
+    VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */,  \
+                               VG_USERREQ__CLIENT_CALL2,          \
+                               _qyy_fn,                           \
+                               _qyy_arg1, _qyy_arg2, 0, 0);       \
+    _qyy_res;                                                     \
+   })
+
+#define VALGRIND_NON_SIMD_CALL3(_qyy_fn, _qyy_arg1, _qyy_arg2, _qyy_arg3) \
+   __extension__                                                  \
+   ({unsigned long _qyy_res;                                      \
+    VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */,  \
+                               VG_USERREQ__CLIENT_CALL3,          \
+                               _qyy_fn,                           \
+                               _qyy_arg1, _qyy_arg2,              \
+                               _qyy_arg3, 0);                     \
+    _qyy_res;                                                     \
+   })
+
+
+/* Counts the number of errors that have been recorded by a tool.  Nb:
+   the tool must record the errors with VG_(maybe_record_error)() or
+   VG_(unique_error)() for them to be counted. */
+#define VALGRIND_COUNT_ERRORS                                     \
+   __extension__                                                  \
+   ({unsigned int _qyy_res;                                       \
+    VALGRIND_DO_CLIENT_REQUEST(_qyy_res, 0 /* default return */,  \
+                               VG_USERREQ__COUNT_ERRORS,          \
+                               0, 0, 0, 0, 0);                    \
+    _qyy_res;                                                     \
+   })
+
+/* Mark a block of memory as having been allocated by a malloc()-like
+   function.  `addr' is the start of the usable block (ie. after any
+   redzone) `rzB' is redzone size if the allocator can apply redzones;
+   use '0' if not.  Adding redzones makes it more likely Valgrind will spot
+   block overruns.  `is_zeroed' indicates if the memory is zeroed, as it is
+   for calloc().  Put it immediately after the point where a block is
+   allocated. 
+   
+   If you're using Memcheck: If you're allocating memory via superblocks,
+   and then handing out small chunks of each superblock, if you don't have
+   redzones on your small blocks, it's worth marking the superblock with
+   VALGRIND_MAKE_MEM_NOACCESS when it's created, so that block overruns are
+   detected.  But if you can put redzones on, it's probably better to not do
+   this, so that messages for small overruns are described in terms of the
+   small block rather than the superblock (but if you have a big overrun
+   that skips over a redzone, you could miss an error this way).  See
+   memcheck/tests/custom_alloc.c for an example.
+
+   WARNING: if your allocator uses malloc() or 'new' to allocate
+   superblocks, rather than mmap() or brk(), this will not work properly --
+   you'll likely get assertion failures during leak detection.  This is
+   because Valgrind doesn't like seeing overlapping heap blocks.  Sorry.
+
+   Nb: block must be freed via a free()-like function specified
+   with VALGRIND_FREELIKE_BLOCK or mismatch errors will occur. */
+#define VALGRIND_MALLOCLIKE_BLOCK(addr, sizeB, rzB, is_zeroed)    \
+   {unsigned int _qzz_res;                                        \
+    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                       \
+                               VG_USERREQ__MALLOCLIKE_BLOCK,      \
+                               addr, sizeB, rzB, is_zeroed, 0);   \
+   }
+
+/* Mark a block of memory as having been freed by a free()-like function.
+   `rzB' is redzone size;  it must match that given to
+   VALGRIND_MALLOCLIKE_BLOCK.  Memory not freed will be detected by the leak
+   checker.  Put it immediately after the point where the block is freed. */
+#define VALGRIND_FREELIKE_BLOCK(addr, rzB)                        \
+   {unsigned int _qzz_res;                                        \
+    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                       \
+                               VG_USERREQ__FREELIKE_BLOCK,        \
+                               addr, rzB, 0, 0, 0);               \
+   }
+
+/* Create a memory pool. */
+#define VALGRIND_CREATE_MEMPOOL(pool, rzB, is_zeroed)             \
+   {unsigned int _qzz_res;                                        \
+    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                       \
+                               VG_USERREQ__CREATE_MEMPOOL,        \
+                               pool, rzB, is_zeroed, 0, 0);       \
+   }
+
+/* Destroy a memory pool. */
+#define VALGRIND_DESTROY_MEMPOOL(pool)                            \
+   {unsigned int _qzz_res;                                        \
+    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                       \
+                               VG_USERREQ__DESTROY_MEMPOOL,       \
+                               pool, 0, 0, 0, 0);                 \
+   }
+
+/* Associate a piece of memory with a memory pool. */
+#define VALGRIND_MEMPOOL_ALLOC(pool, addr, size)                  \
+   {unsigned int _qzz_res;                                        \
+    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                       \
+                               VG_USERREQ__MEMPOOL_ALLOC,         \
+                               pool, addr, size, 0, 0);           \
+   }
+
+/* Disassociate a piece of memory from a memory pool. */
+#define VALGRIND_MEMPOOL_FREE(pool, addr)                         \
+   {unsigned int _qzz_res;                                        \
+    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                       \
+                               VG_USERREQ__MEMPOOL_FREE,          \
+                               pool, addr, 0, 0, 0);              \
+   }
+
+/* Disassociate any pieces outside a particular range. */
+#define VALGRIND_MEMPOOL_TRIM(pool, addr, size)                   \
+   {unsigned int _qzz_res;                                        \
+    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                       \
+                               VG_USERREQ__MEMPOOL_TRIM,          \
+                               pool, addr, size, 0, 0);           \
+   }
+
+/* Resize and/or move a piece associated with a memory pool. */
+#define VALGRIND_MOVE_MEMPOOL(poolA, poolB)                       \
+   {unsigned int _qzz_res;                                        \
+    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                       \
+                               VG_USERREQ__MOVE_MEMPOOL,          \
+                               poolA, poolB, 0, 0, 0);            \
+   }
+
+/* Resize and/or move a piece associated with a memory pool. */
+#define VALGRIND_MEMPOOL_CHANGE(pool, addrA, addrB, size)         \
+   {unsigned int _qzz_res;                                        \
+    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                       \
+                               VG_USERREQ__MEMPOOL_CHANGE,        \
+                               pool, addrA, addrB, size, 0);      \
+   }
+
+/* Return 1 if a mempool exists, else 0. */
+#define VALGRIND_MEMPOOL_EXISTS(pool)                             \
+   ({unsigned int _qzz_res;                                       \
+    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                       \
+                               VG_USERREQ__MEMPOOL_EXISTS,        \
+                               pool, 0, 0, 0, 0);                 \
+    _qzz_res;                                                     \
+   })
+
+/* Mark a piece of memory as being a stack. Returns a stack id. */
+#define VALGRIND_STACK_REGISTER(start, end)                       \
+   ({unsigned int _qzz_res;                                       \
+    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                       \
+                               VG_USERREQ__STACK_REGISTER,        \
+                               start, end, 0, 0, 0);              \
+    _qzz_res;                                                     \
+   })
+
+/* Unmark the piece of memory associated with a stack id as being a
+   stack. */
+#define VALGRIND_STACK_DEREGISTER(id)                             \
+   {unsigned int _qzz_res;                                        \
+    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                       \
+                               VG_USERREQ__STACK_DEREGISTER,      \
+                               id, 0, 0, 0, 0);                   \
+   }
+
+/* Change the start and end address of the stack id. */
+#define VALGRIND_STACK_CHANGE(id, start, end)                     \
+   {unsigned int _qzz_res;                                        \
+    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                       \
+                               VG_USERREQ__STACK_CHANGE,          \
+                               id, start, end, 0, 0);             \
+   }
+
+
+#undef PLAT_x86_linux
+#undef PLAT_amd64_linux
+#undef PLAT_ppc32_linux
+#undef PLAT_ppc64_linux
+#undef PLAT_ppc32_aix5
+#undef PLAT_ppc64_aix5
+
+#endif   /* __VALGRIND_H */
--- a/libpurple/win32/global.mak	Mon Jul 27 15:42:19 2009 +0900
+++ b/libpurple/win32/global.mak	Tue Jul 28 18:48:17 2009 +0900
@@ -47,6 +47,8 @@
 # Locations of important (in-tree) build targets
 PIDGIN_CONFIG_H := $(PIDGIN_TREE_TOP)/config.h
 PURPLE_CONFIG_H := $(PIDGIN_TREE_TOP)/config.h
+PIDGIN_REVISION_H := $(PIDGIN_TREE_TOP)/package_revision.h
+PIDGIN_REVISION_RAW_TXT := $(PIDGIN_TREE_TOP)/package_revision_raw.txt
 PIDGIN_IDLETRACK_DLL := $(PIDGIN_IDLETRACK_TOP)/idletrack.dll
 PURPLE_PURPLE_H := $(PURPLE_TOP)/purple.h
 PURPLE_VERSION_H := $(PURPLE_TOP)/version.h
--- a/libpurple/win32/targets.mak	Mon Jul 27 15:42:19 2009 +0900
+++ b/libpurple/win32/targets.mak	Tue Jul 28 18:48:17 2009 +0900
@@ -17,6 +17,16 @@
 	  /^m4_define..purple_minor_version/ {system("sed -e s/@PURPLE_MINOR_VERSION@/"$$5"/ $@ > $@.tmp && mv $@.tmp $@");} \
 	  /^m4_define..purple_micro_version/ {system("sed -e s/@PURPLE_MICRO_VERSION@/"$$5"/ $@ > $@.tmp && mv $@.tmp $@"); exit}' $(PIDGIN_TREE_TOP)/configure.ac
 
+$(PIDGIN_REVISION_RAW_TXT):
+	(cd $(PIDGIN_TREE_TOP) && mtn --root=. automate get_base_revision_id) 2>/dev/null >$@ \
+	|| rm -f $@
+
+$(PIDGIN_REVISION_H): $(PIDGIN_REVISION_RAW_TXT)
+	if [ -f $< ]; then \
+		sed 's/^\(.\+\)$$/#define REVISION "\1"/' $< > $@; \
+	fi
+	[ -f $@ ] || echo "#define REVISION \"unknown\"" > $@
+
 $(PURPLE_DLL) $(PURPLE_DLL).a: $(PURPLE_VERSION_H)
 	$(MAKE) -C $(PURPLE_TOP) -f $(MINGW_MAKEFILE) libpurple.dll
 
--- a/pidgin/gtkft.c	Mon Jul 27 15:42:19 2009 +0900
+++ b/pidgin/gtkft.c	Tue Jul 28 18:48:17 2009 +0900
@@ -75,8 +75,6 @@
 
 	/* Buttons */
 	GtkWidget *open_button;
-	GtkWidget *pause_button;
-	GtkWidget *resume_button;
 	GtkWidget *remove_button;
 	GtkWidget *stop_button;
 	GtkWidget *close_button;
@@ -330,8 +328,6 @@
 	if (dialog->selected_xfer == NULL) {
 		gtk_widget_set_sensitive(dialog->expander, FALSE);
 		gtk_widget_set_sensitive(dialog->open_button, FALSE);
-		gtk_widget_set_sensitive(dialog->pause_button, FALSE);
-		gtk_widget_set_sensitive(dialog->resume_button, FALSE);
 		gtk_widget_set_sensitive(dialog->stop_button, FALSE);
 
 		gtk_widget_show(dialog->stop_button);
@@ -361,8 +357,6 @@
 			gtk_widget_set_sensitive (dialog->open_button, FALSE);
 		}
 #endif
-		gtk_widget_set_sensitive(dialog->pause_button,  FALSE);
-		gtk_widget_set_sensitive(dialog->resume_button, FALSE);
 
 		gtk_widget_set_sensitive(dialog->remove_button, TRUE);
 	} else if (purple_xfer_is_canceled(xfer)) {
@@ -370,8 +364,6 @@
 		gtk_widget_show(dialog->remove_button);
 
 		gtk_widget_set_sensitive(dialog->open_button,  FALSE);
-		gtk_widget_set_sensitive(dialog->pause_button,  FALSE);
-		gtk_widget_set_sensitive(dialog->resume_button, FALSE);
 
 		gtk_widget_set_sensitive(dialog->remove_button, TRUE);
 	} else {
@@ -379,10 +371,6 @@
 		gtk_widget_hide(dialog->remove_button);
 
 		gtk_widget_set_sensitive(dialog->open_button,  FALSE);
-
-		/* TODO: If the transfer can pause, blah blah */
-		gtk_widget_set_sensitive(dialog->pause_button,  FALSE);
-		gtk_widget_set_sensitive(dialog->resume_button, FALSE);
 		gtk_widget_set_sensitive(dialog->stop_button,   TRUE);
 	}
 }
@@ -559,16 +547,6 @@
 }
 
 static void
-pause_button_cb(GtkButton *button, PidginXferDialog *dialog)
-{
-}
-
-static void
-resume_button_cb(GtkButton *button, PidginXferDialog *dialog)
-{
-}
-
-static void
 remove_button_cb(GtkButton *button, PidginXferDialog *dialog)
 {
 	pidgin_xfer_dialog_remove_xfer(dialog, dialog->selected_xfer);
@@ -763,6 +741,7 @@
 
 	/* Create the window. */
 	dialog->window = window = pidgin_create_dialog(_("File Transfers"), PIDGIN_HIG_BORDER, "file transfer", TRUE);
+	gtk_window_set_default_size(GTK_WINDOW(window), 450, 250);
 
 	g_signal_connect(G_OBJECT(window), "delete_event",
 					 G_CALLBACK(delete_win_cb), dialog);
@@ -818,16 +797,6 @@
 	gtk_widget_set_sensitive(button, FALSE);
 	dialog->open_button = button;
 
-	/* Pause button */
-	button = pidgin_dialog_add_button(GTK_DIALOG(window), _("_Pause"), G_CALLBACK(pause_button_cb), dialog);
-	gtk_widget_set_sensitive(button, FALSE);
-	dialog->pause_button = button;
-
-	/* Resume button */
-	button = pidgin_dialog_add_button(GTK_DIALOG(window), _("_Resume"), G_CALLBACK(resume_button_cb), dialog);
-	gtk_widget_set_sensitive(button, FALSE);
-	dialog->resume_button = button;
-
 	/* Remove button */
 	button = pidgin_dialog_add_button(GTK_DIALOG(window), GTK_STOCK_REMOVE, G_CALLBACK(remove_button_cb), dialog);
 	gtk_widget_hide(button);
--- a/pidgin/gtkmedia.c	Mon Jul 27 15:42:19 2009 +0900
+++ b/pidgin/gtkmedia.c	Tue Jul 28 18:48:17 2009 +0900
@@ -38,6 +38,10 @@
 #ifdef USE_VV
 #include "media-gst.h"
 
+#ifdef _WIN32
+#include <gdk/gdkwin32.h>
+#endif
+
 #include <gst/interfaces/xoverlay.h>
 
 #define PIDGIN_TYPE_MEDIA            (pidgin_media_get_type())
@@ -213,6 +217,7 @@
 	return FALSE;
 }
 
+#ifdef HAVE_X11
 static int
 pidgin_x_error_handler(Display *display, XErrorEvent *event)
 {
@@ -246,6 +251,7 @@
 			error_type);
 	return 0;
 }
+#endif
 
 static void
 menu_hangup(gpointer data, guint action, GtkWidget *item)
@@ -303,7 +309,9 @@
 	GtkWidget *vbox;
 	media->priv = PIDGIN_MEDIA_GET_PRIVATE(media);
 
+#ifdef HAVE_X11
 	XSetErrorHandler(pidgin_x_error_handler);
+#endif
 
 	vbox = gtk_vbox_new(FALSE, 0);
 	gtk_container_add(GTK_CONTAINER(media), vbox);
@@ -450,10 +458,19 @@
 	PidginMediaPrivate *priv = data->gtkmedia->priv;
 	gulong window_id;
 
+#ifdef _WIN32
+	if (data->participant == NULL)
+		window_id = GDK_WINDOW_HWND(priv->local_video->window);
+	else
+		window_id = GDK_WINDOW_HWND(priv->remote_video->window);
+#elif defined(HAVE_X11)
 	if (data->participant == NULL)
 		window_id = GDK_WINDOW_XWINDOW(priv->local_video->window);
 	else
 		window_id = GDK_WINDOW_XWINDOW(priv->remote_video->window);
+#else
+#	error "Unsupported windowing system"
+#endif
 
 	purple_media_set_output_window(priv->media, data->session_id,
 			data->participant, window_id);
@@ -786,7 +803,7 @@
 		gchar *sid, gchar *name, PidginMedia *gtkmedia)
 {
 	purple_debug_info("gtkmedia", "state: %d sid: %s name: %s\n",
-			state, sid, name);
+			state, sid ? sid : "(null)", name ? name : "(null)");
 	if (sid == NULL && name == NULL) {
 		if (state == PURPLE_MEDIA_STATE_END) {
 			pidgin_media_emit_message(gtkmedia,
--- a/pidgin/plugins/cap/cap.c	Mon Jul 27 15:42:19 2009 +0900
+++ b/pidgin/plugins/cap/cap.c	Tue Jul 28 18:48:17 2009 +0900
@@ -373,6 +373,9 @@
 	CapStatistics *stats;
 	/* guint words = word_count(message); */
 
+	if (flags & PURPLE_MESSAGE_AUTO_RESP)
+		return;
+
 	buddy = purple_find_buddy(account, sender);
 
 	if (buddy == NULL)
--- a/po/ChangeLog	Mon Jul 27 15:42:19 2009 +0900
+++ b/po/ChangeLog	Tue Jul 28 18:48:17 2009 +0900
@@ -13,6 +13,7 @@
 	* Galician translation updated (Frco. Javier Rial Rodríguez)
 	* German translation updated (Jochen Kemnade and Björn Voigt)
 	* Greek translation updated (Bouklis Panos)
+	* Hebrew translation updated (Shalom Craimer)
 	* Khmer translation added (Khoem Sokhem)
 	* Lao translation updated (Anousak Souphavah)
 	* Norwegian Nynorsk translation updated (Yngve Spjeld Landro)
--- a/po/he.po	Mon Jul 27 15:42:19 2009 +0900
+++ b/po/he.po	Tue Jul 28 18:48:17 2009 +0900
@@ -1,5 +1,5 @@
 # Pidgin Hebrew translation
-# Copyright (C) 2005-2007, Shalom Craimer <scraimer at gmail dot com>
+# Copyright (C) 2005-2009, Shalom Craimer <scraimer at gmail dot com>
 # Copyright (C) 2003, Pavel Bibergal cyberkm@barak-online.net
 #
 # This file is distributed under the same license as the Pidgin package.
@@ -8,8 +8,8 @@
 msgstr ""
 "Project-Id-Version: he\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-06 15:04-0700\n"
-"PO-Revision-Date: 2008-08-27 21:03+0200\n"
+"POT-Creation-Date: 2009-07-27 19:57-0700\n"
+"PO-Revision-Date: 2009-07-27 16:21+0200\n"
 "Last-Translator: Shalom Craimer <scraimer at g mail dot com>\n"
 "Language-Team: Hebrew <he@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -26,7 +26,7 @@
 msgid "%s. Try `%s -h' for more information.\n"
 msgstr "%s. יש לנסות את '%s –h' למידע נוסף.\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s\n"
 "Usage: %s [OPTION]...\n"
@@ -41,7 +41,7 @@
 "שימוש: %s [אפשרות]...\n"
 "\n"
 "  -c, --config=ספריה  השתמש בספרייה לקבצי הגדרות\n"
-"  -d, --debug         שלח הודעות ניפוי באגים ל-stdout\n"
+"  -d, --debug         שלח הודעות ניפוי באגים ל-stderr\n"
 "  -h, --help          הצג הודעה זו וצא\n"
 "  -n, --nologin       אל תתחבר אוטומטית\n"
 "  -v, --version       הצג את הגירסא של התוכנה וצא\n"
@@ -70,7 +70,6 @@
 msgid "Remember password"
 msgstr "זכור סיסמה"
 
-#, fuzzy
 msgid "There are no protocol plugins installed."
 msgstr "לא מותקנים תוספים לפרוטוקולים."
 
@@ -843,12 +842,11 @@
 msgid "System Log"
 msgstr "דו\"ח מערכת"
 
-#, fuzzy
 msgid "Calling ... "
-msgstr "מחשב..."
+msgstr "מתקשר ..."
 
 msgid "Hangup"
-msgstr ""
+msgstr "התנתק"
 
 #. Number of actions
 msgid "Accept"
@@ -858,25 +856,24 @@
 msgstr "דחה"
 
 msgid "Call in progress."
-msgstr ""
+msgstr "באמצע שיחה."
 
 msgid "The call has been terminated."
-msgstr ""
+msgstr "השיחה נותקה."
 
 #, c-format
 msgid "%s wishes to start an audio session with you."
-msgstr ""
+msgstr "נתקבלה בקשה מאת %s לבצע התקשרות קולית."
 
 #, c-format
 msgid "%s is trying to start an unsupported media session type with you."
-msgstr ""
-
-#, fuzzy
+msgstr "נקבלה בקשה מאת %s לביצוע התקשרות שאינה נתמכת."
+
 msgid "You have rejected the call."
-msgstr "עזבת את הערוץ%s%s"
+msgstr "דחית את השיחה."
 
 msgid "call: Make an audio call."
-msgstr ""
+msgstr "call: בצע התקשרות קולית."
 
 msgid "Emails"
 msgstr "דוא\"ל"
@@ -1500,10 +1497,10 @@
 msgstr "ללא קיבוץ"
 
 msgid "Nested Subgroup"
-msgstr ""
+msgstr "קבוצה בתוך קבוצה"
 
 msgid "Nested Grouping (experimental)"
-msgstr ""
+msgstr "קבוצות בתוך קבוצות (נסיוני)"
 
 msgid "Provides alternate buddylist grouping options."
 msgstr "מאפשר אפשרויות נוספות לחלוקת רשימת אנשי הקשר לקבוצות."
@@ -1526,22 +1523,23 @@
 "\n"
 "Fetching TinyURL..."
 msgstr ""
+"\n"
+"מביא TinyURL..."
 
 msgid "Only create TinyURL for urls of this length or greater"
-msgstr ""
+msgstr "רק ייצר TinyURL עבור כתובות באורך הזה ומעלה"
 
 msgid "TinyURL (or other) address prefix"
-msgstr ""
-
-#, fuzzy
+msgstr "ראשית כתובת עבור TinyURL (או אחר)"
+
 msgid "TinyURL"
-msgstr "כתובת השיר"
+msgstr "TinyURL"
 
 msgid "TinyURL plugin"
-msgstr ""
+msgstr "תוסף TinyURL"
 
 msgid "When receiving a message with URL(s), TinyURL for easier copying"
-msgstr ""
+msgstr "בעת קבלת הודעה עם כתובת, השתמש ב-TinyURL להעתקה קלה יותר"
 
 msgid "accounts"
 msgstr "חשבונות"
@@ -1655,6 +1653,7 @@
 msgstr ""
 "התעודה שהוצגה על ידי \"%s\" נחתמה על ידי עצמה. לא ניתן לבצע בדיקה אוטומטית."
 
+#. FIXME 2.6.1
 #, c-format
 msgid "The certificate chain presented for %s is not valid."
 msgstr "שרשרת רשויות הנפקת התעודה עבור %s אינה תקפה."
@@ -1664,6 +1663,7 @@
 #. stifle it.
 #. TODO: Probably wrong.
 #. TODO: Probably wrong
+#. TODO: Probably wrong.
 msgid "SSL Certificate Error"
 msgstr "שגיאת תעודת SSL"
 
@@ -1741,7 +1741,6 @@
 msgstr "+++ %s התנתק"
 
 #. Unknown error
-#. Unknown error!
 msgid "Unknown error"
 msgstr "שגיאה לא מוכרת"
 
@@ -1788,9 +1787,8 @@
 msgid "%s left the room (%s)."
 msgstr "%s עזב את החדר (%s)."
 
-#, fuzzy
 msgid "Invite to chat"
-msgstr "הזמן לועידה"
+msgstr "הזמן לצ'אט"
 
 #. Put our happy label in it.
 msgid ""
@@ -1844,7 +1842,7 @@
 
 #, c-format
 msgid "Resolver process exited without answering our request"
-msgstr ""
+msgstr "שירות תרגום הכתובת סיים ללא תשובה לבקשתנו"
 
 #, c-format
 msgid "Thread creation failure: %s"
@@ -1929,6 +1927,10 @@
 msgstr "מתחיל את ההעברה של %s מ-%s"
 
 #, c-format
+msgid "Transfer of file <A HREF=\"file://%s\">%s</A> complete"
+msgstr "העברה של הקובץ <A HREF=\"file://%s\">%s</A> הושלמה"
+
+#, c-format
 msgid "Transfer of file %s complete"
 msgstr "העברה של קובץ %s הושלמה"
 
@@ -2123,9 +2125,8 @@
 msgid "(%s) %s <AUTO-REPLY>: %s\n"
 msgstr "(%s) %s <מענה-אוטומטי>: %s\n"
 
-#, fuzzy
 msgid "Error creating conference."
-msgstr "שגיאה ביצירת החיבור"
+msgstr "שגיאה ביצירת שיחת הועידה."
 
 #, c-format
 msgid "You are using %s, but this plugin requires %s."
@@ -2517,7 +2518,6 @@
 msgstr "כלול יומנים של תוכנות צ'אט אחרות בצופה-היומנים."
 
 #. * description
-#, fuzzy
 msgid ""
 "When viewing logs, this plugin will include logs from other IM clients. "
 "Currently, this includes Adium, MSN Messenger, aMSN, and Trillian.\n"
@@ -2526,7 +2526,7 @@
 "at your own risk!"
 msgstr ""
 "בעת צפייה ביומני-שיחה, תוסף זה יכלול יומנים מתוכנות צ'אט אחרות. כרגע, זה "
-"כולל Adium, MSN Messenger, Trillian.\n"
+"כולל Adium, MSN Messenger, aMSN, Trillian.\n"
 "\n"
 "אזהרה: תוסף זה עדיין בשלבי פיתוח מוקדמים וייתכן ויקרוס לעיתים קרובות.  יש "
 "להשתמש בו על חשבון סיכונך האישי בלבד!"
@@ -2574,7 +2574,6 @@
 msgid "Save messages sent to an offline user as pounce."
 msgstr "שמור הודעות שנשלחו למשתמש לא-מחובר בתור תגובת-פעילות."
 
-#, fuzzy
 msgid ""
 "The rest of the messages will be saved as pounces. You can edit/delete the "
 "pounce from the `Buddy Pounce' dialog."
@@ -2608,9 +2607,8 @@
 msgid "Do not ask. Always save in pounce."
 msgstr "אל תשאל. תמיד שמור בתגובת פעילות."
 
-#, fuzzy
 msgid "One Time Password"
-msgstr "הזן סיסמא"
+msgstr "One Time Password"
 
 #. *< type
 #. *< ui_requirement
@@ -2619,13 +2617,13 @@
 #. *< priority
 #. *< id
 msgid "One Time Password Support"
-msgstr ""
+msgstr "תמיכת One Time Password"
 
 #. *< name
 #. *< version
 #. *  summary
 msgid "Enforce that passwords are used only once."
-msgstr ""
+msgstr "אכוף שימוש בסיסמאות חד-פעמיות"
 
 #. *  description
 msgid ""
@@ -2633,6 +2631,9 @@
 "are only used in a single successful connection.\n"
 "Note: The account password must not be saved for this to work."
 msgstr ""
+"מאפשר לך לאכוף לכל חשבון משתמש שסיסמאות שאינן נשמרות ישומשו רק לחיבור יחיד "
+"שמצליח.\n"
+"הערה: על מנת שזה יעבוד אין לשמור את סיסמת החשבון."
 
 #. *< type
 #. *< ui_requirement
@@ -2826,17 +2827,15 @@
 "לא היה ניתן לזהות ActiveTCL מתוקן. אם ברצונך להשתמש בתוספי TCL, יש להתקין "
 "ActiveTCL מתוך http://www.activestate.com\n"
 
-#, fuzzy
 msgid ""
 "Unable to find Apple's \"Bonjour for Windows\" toolkit, see http://d.pidgin."
 "im/BonjourWindows for more information."
 msgstr ""
-"חבילת בונג'ור של אפל עבור חלונות לא נמצאה, ראה את השו\"ת באתר: http://d."
+"חבילת \"בונג'ור\" של אפל עבור חלונות לא נמצאה, ראה את השו\"ת באתר: http://d."
 "pidgin.im/BonjourWindows למידע נוסף."
 
-#, fuzzy
 msgid "Unable to listen for incoming IM connections"
-msgstr "לא ניתן להקשיב לתקשורת-הודעות נכנסת.\n"
+msgstr "לא ניתן להקשיב לחיבורי הודעות נכנסת"
 
 msgid ""
 "Unable to establish connection with the local mDNS server.  Is it running?"
@@ -2874,9 +2873,8 @@
 msgstr "אדם סגול"
 
 #. Creating the options for the protocol
-#, fuzzy
 msgid "Local Port"
-msgstr "מיקום"
+msgstr "חיבור מקומי"
 
 msgid "Bonjour"
 msgstr "Bonjour"
@@ -2888,21 +2886,17 @@
 msgid "Unable to send the message, the conversation couldn't be started."
 msgstr "לא ניתן לשלוח את ההודעה, לא היה אפשר להתחיל את השיחה."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to create socket: %s"
-msgstr ""
-"אין אפשרות ליצור שקע:\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "אין אפשרות ליצור שקע: %s"
+
+#, c-format
 msgid "Unable to bind socket to port: %s"
-msgstr "לא ניתן לקבע את השקע ליציאה"
-
-#, fuzzy, c-format
+msgstr "לא ניתן לקבע את השקע ליציאה: %s"
+
+#, c-format
 msgid "Unable to listen on socket: %s"
-msgstr ""
-"אין אפשרות ליצור שקע:\n"
-"%s"
+msgstr "אין אפשרות ליצור שקע: %s"
 
 msgid "Error communicating with local mDNSResponder."
 msgstr "שגיאה בתקשורת עם mDNSResponder מקומי."
@@ -2949,17 +2943,14 @@
 msgid "Load buddylist from file..."
 msgstr "טען את רשימת אנשי הקשר מקובץ..."
 
-#, fuzzy
 msgid "You must fill in all registration fields"
-msgstr "יש למלא את שדות ההרשמה."
-
-#, fuzzy
+msgstr "יש למלא את כל שדות ההרשמה"
+
 msgid "Passwords do not match"
-msgstr "הסיסמאות אינן תואמות."
-
-#, fuzzy
+msgstr "הסיסמאות אינן תואמות"
+
 msgid "Unable to register new account.  An unknown error occurred."
-msgstr "לא ניתן לבצע הרשמה לחשבון חדש. אירעה שגיאה.\n"
+msgstr "לא ניתן לבצע הרשמה לחשבון חדש. אירעה שגיאה לא-מוכרת."
 
 msgid "New Gadu-Gadu Account Registered"
 msgstr "הושלמה ההרשמה לחשבון החדש של Gadu-Gadu"
@@ -2974,11 +2965,10 @@
 msgstr "סיסמא (שנית)"
 
 msgid "Enter captcha text"
-msgstr ""
-
-#, fuzzy
+msgstr "יש להזין את טקסט ב-caphtca"
+
 msgid "Captcha"
-msgstr "שמור תמונה"
+msgstr "Captcha"
 
 msgid "Register New Gadu-Gadu Account"
 msgstr "בצע רישום לחשבון חדש של Gadu-Gadu"
@@ -3117,9 +3107,9 @@
 msgid "Chat _name:"
 msgstr "שם _צ'אט:"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to resolve hostname '%s': %s"
-msgstr "לא ניתן להתחבר לשרת"
+msgstr "לא ניתן לתרגם לכתובת את שם השרת '%s': %s"
 
 #. 1. connect to server
 #. connect to the server
@@ -3132,9 +3122,8 @@
 msgid "This chat name is already in use"
 msgstr "שם הצ'אט הזה כבר בשימוש"
 
-#, fuzzy
 msgid "Not connected to the server"
-msgstr "לא מחובר לשרת."
+msgstr "לא מחובר אל השרת"
 
 msgid "Find buddies..."
 msgstr "חפש אנשי קשר..."
@@ -3175,9 +3164,8 @@
 msgid "Gadu-Gadu User"
 msgstr "משתמש Gadu-Gadu"
 
-#, fuzzy
 msgid "GG server"
-msgstr "קבע את המידע על המשתמש..."
+msgstr "שרת GG"
 
 #, c-format
 msgid "Unknown command: %s"
@@ -3193,7 +3181,6 @@
 msgid "File Transfer Failed"
 msgstr "העברת הקובץ נכשלה"
 
-#, fuzzy
 msgid "Unable to open a listening port."
 msgstr "לא ניתן לפתוח שקע-קשב."
 
@@ -3217,11 +3204,9 @@
 #.
 #. TODO: what to do here - do we really have to disconnect?
 #. TODO: do we really want to disconnect on a failure to write?
-#, fuzzy, c-format
+#, c-format
 msgid "Lost connection with server: %s"
-msgstr ""
-"אבדה התקשורת עם השרת:\n"
-"%s"
+msgstr "אבדה התקשורת עם השרת: %s"
 
 msgid "View MOTD"
 msgstr "הצג את הודעת היום"
@@ -3232,9 +3217,8 @@
 msgid "_Password:"
 msgstr "_סיסמא:"
 
-#, fuzzy
 msgid "IRC nick and server may not contain whitespace"
-msgstr "אסור לשמות ב-IRC להכיל רווחים"
+msgstr "אסור לשמות ולשרתים ב-IRC להכיל רווחים"
 
 msgid "SSL support unavailable"
 msgstr "אין תמיכה ב-SSL."
@@ -3243,13 +3227,13 @@
 msgstr "לא ניתן להתחבר"
 
 #. this is a regular connect, error out
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to connect: %s"
-msgstr "לא ניתן להתחבר אל %s"
-
-#, fuzzy, c-format
+msgstr "לא ניתן להתחבר: %s"
+
+#, c-format
 msgid "Server closed the connection"
-msgstr "השרת סגר את החיבור."
+msgstr "השרת סגר את החיבור"
 
 msgid "Users"
 msgstr "משתמשים"
@@ -3429,13 +3413,12 @@
 #. We only want to do the following dance if the connection
 #. has not been successfully completed.  If it has, just
 #. notify the user that their /nick command didn't go.
-#, fuzzy, c-format
+#, c-format
 msgid "The nickname \"%s\" is already being used."
-msgstr "שם הצ'אט הזה כבר בשימוש"
-
-#, fuzzy
+msgstr "הכינו \"%s\" כבר בשימוש."
+
 msgid "Nickname in use"
-msgstr "כינוי"
+msgstr "שם-הכינוי בשימוש"
 
 msgid "Cannot change nick"
 msgstr "כשל בשינוי הכינוי"
@@ -3667,11 +3650,9 @@
 msgid "execute"
 msgstr "הפעל"
 
-#, fuzzy
 msgid "Server requires TLS/SSL, but no TLS/SSL support was found."
-msgstr "השרת דורש TLS/SSL להתחברות. לא נמצאה תמיכה ל-TLS/SSL."
-
-#, fuzzy
+msgstr "השרת דורש TLS/SSL להתחברות, אך לא נמצאה תמיכה ל-TLS/SSL."
+
 msgid "You require encryption, but no TLS/SSL support was found."
 msgstr "הגדרת דרישה להצפנה, אך לא נמצאה תמיכה ב-TLS/SSL."
 
@@ -3687,13 +3668,11 @@
 msgid "Plaintext Authentication"
 msgstr "אימות לא מוצפן"
 
-#, fuzzy
 msgid "SASL authentication failed"
-msgstr "האימות נכשל"
-
-#, fuzzy
+msgstr "אימות SASL נכשל"
+
 msgid "Invalid response from server"
-msgstr "שגיעה בתגובה מהשרת"
+msgstr "תגובה לא תקפה מהשרת"
 
 msgid "Server does not use any supported authentication method"
 msgstr "השרת לא תומך באימות באף תצורה"
@@ -3704,36 +3683,28 @@
 msgid "Invalid challenge from server"
 msgstr "תשובת אימות לא תקפה מהשרת"
 
-#, fuzzy, c-format
+#, c-format
 msgid "SASL error: %s"
-msgstr "שגיאת SASL"
+msgstr "שגיאת SASL: %s"
 
 msgid "The BOSH connection manager terminated your session."
-msgstr ""
-
-#, fuzzy
+msgstr "מנהל התקשורת BOSH ניתק את חיבורך."
+
 msgid "No session ID given"
-msgstr "לא ניתנה סיבה."
-
-#, fuzzy
+msgstr "לא ניתן מזהה לחיבור"
+
 msgid "Unsupported version of BOSH protocol"
-msgstr "גירסא ללא תמיכה"
-
-#, fuzzy
+msgstr "גירסת פרוטוקול BOSH שאינה נתמכת"
+
 msgid "Unable to establish a connection with the server"
-msgstr ""
-"לא ניתן ליצור חיבור עם השרת:\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "לא ניתן ליצור חיבור עם השרת"
+
+#, c-format
 msgid "Unable to establish a connection with the server: %s"
-msgstr ""
-"לא ניתן ליצור חיבור עם השרת:\n"
-"%s"
-
-#, fuzzy
+msgstr "לא ניתן ליצור חיבור עם השרת: %s"
+
 msgid "Unable to establish SSL connection"
-msgstr "לא ניתן לאתחל חיבור"
+msgstr "לא ניתן ליצור חיבור SSL"
 
 msgid "Full Name"
 msgstr "שם מלא"
@@ -3799,9 +3770,8 @@
 msgid "Operating System"
 msgstr "מערכת הפעלה"
 
-#, fuzzy
 msgid "Local Time"
-msgstr "קובץ מקומי:"
+msgstr "שעה מקומית"
 
 msgid "Priority"
 msgstr "עדיפות"
@@ -3811,11 +3781,10 @@
 
 #, c-format
 msgid "%s ago"
-msgstr ""
-
-#, fuzzy
+msgstr "לפני %s"
+
 msgid "Logged Off"
-msgstr "מחובר"
+msgstr "התנתק/ה"
 
 msgid "Middle Name"
 msgstr "שם אמצעי"
@@ -3983,26 +3952,22 @@
 msgid "Find Rooms"
 msgstr "חפש חדרים"
 
-#, fuzzy
 msgid "Affiliations:"
-msgstr "תיאור:"
-
-#, fuzzy
+msgstr "שיוכים:"
+
 msgid "No users found"
-msgstr "לא נמצאו משתמשים תואמים"
-
-#, fuzzy
+msgstr "לא נמצאו משתמשים"
+
 msgid "Roles:"
-msgstr "תפקיד"
-
-#, fuzzy
+msgstr "תפקידים:"
+
 msgid "Ping timed out"
 msgstr "פינג לא חזר בזמן"
 
 msgid ""
 "Unable to find alternative XMPP connection methods after failing to connect "
 "directly."
-msgstr ""
+msgstr "לא יכול למצוא צורות חיבור XMPP חלופיות אחרי כישלון בחיבור ישירות."
 
 msgid "Invalid XMPP ID"
 msgstr "מזהה XMPP לא תקין"
@@ -4010,9 +3975,8 @@
 msgid "Invalid XMPP ID. Domain must be set."
 msgstr "מזהה XMPP שגוי. יש להגדיר את הדומיין."
 
-#, fuzzy
 msgid "Malformed BOSH URL"
-msgstr "כשל בהתחברות לשרת"
+msgstr "כתובת BOTH משובשת"
 
 #, c-format
 msgid "Registration of %s@%s successful"
@@ -4080,10 +4044,6 @@
 msgid "Change Registration"
 msgstr "שנה רישום"
 
-#, fuzzy
-msgid "Malformed BOSH Connect Server"
-msgstr "כשל בהתחברות לשרת"
-
 msgid "Error unregistering account"
 msgstr "שגיאה ברישום חשבון"
 
@@ -4103,7 +4063,7 @@
 msgstr "מאתחל את הזרם מחדש"
 
 msgid "Server doesn't support blocking"
-msgstr ""
+msgstr "השרת לא תומך בחסימה"
 
 msgid "Not Authorized"
 msgstr "לא מורשה"
@@ -4369,19 +4329,19 @@
 msgid "Unable to ping user %s"
 msgstr "לא ניתן לעשות פינג למשתמש %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to buzz, because there is nothing known about %s."
-msgstr "לא ניתן לזמזם, מכיוון שלא ידוע כלום על המשתמש %s."
-
-#, fuzzy, c-format
+msgstr "לא ניתן לזמזם, מכיוון שלא ידוע כלום על %s."
+
+#, c-format
 msgid "Unable to buzz, because %s might be offline."
-msgstr "לא ניתן לזמזם, מכיוון שייתכן והמשתמש %s לא מחובר."
-
-#, fuzzy, c-format
+msgstr "לא ניתן לזמזם, מכיוון שייתכן כי%s לא מחובר."
+
+#, c-format
 msgid ""
 "Unable to buzz, because %s does not support it or does not wish to receive "
 "buzzes now."
-msgstr "לא ניתן לזמזם, כי המשתמש %s  לא תומך בזה."
+msgstr "לא ניתן לזמזם, כי %s  לא תומך בזה או לא רוצה לקבל זימזומים כרגע."
 
 #, c-format
 msgid "Buzzing %s..."
@@ -4396,34 +4356,32 @@
 msgid "%s has buzzed you!"
 msgstr "%s זימזם אותך!"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to initiate media with %s: invalid JID"
-msgstr "לא ניתן לשלוח את הקובץ ל %s, JID לא-תקף"
-
-#, fuzzy, c-format
+msgstr "לא ניתן ליזום מדיה עם %s: JID לא תקף"
+
+#, c-format
 msgid "Unable to initiate media with %s: user is not online"
-msgstr "לא ניתן לשלוח את הקובץ אל %s, המשתמש לא מחובר"
-
-#, fuzzy, c-format
+msgstr "לא ניתן ליזום מדיה עם %s: המשתמש לא מחובר"
+
+#, c-format
 msgid "Unable to initiate media with %s: not subscribed to user presence"
-msgstr "לא ניתן לשלוח את הקובץ אל %s, אינך רשומ/ה להודעת קיום המשתמש"
-
-#, fuzzy
+msgstr "לא ניתן ליזום מדיה עם %s: לא רשום להודעות-נוכחות המשתמש"
+
 msgid "Media Initiation Failed"
-msgstr "הרישום נכשל"
-
-#, fuzzy, c-format
+msgstr "ייזום מדיה נכשל"
+
+#, c-format
 msgid ""
 "Please select the resource of %s with which you would like to start a media "
 "session."
-msgstr "יש לבחור את המשאב של %s אליו ברצונך לשלוח קובץ"
+msgstr "יש לבחור את המשאב של %s איתו ברצונך להתחיל תקשורת מדיה."
 
 msgid "Select a Resource"
 msgstr "יש לבחור משאב"
 
-#, fuzzy
 msgid "Initiate Media"
-msgstr "יז_ום שיחה"
+msgstr "יזום מדיה"
 
 msgid "config:  Configure a chat room."
 msgstr "config:  קבע הגדרות חדר צ'אט."
@@ -4443,21 +4401,19 @@
 msgid "ban &lt;user&gt; [reason]:  Ban a user from the room."
 msgstr "ban &lt;משתמש&gt; [סיבה]:  חסום משתמש מן החדר."
 
-#, fuzzy
 msgid ""
 "affiliate &lt;owner|admin|member|outcast|none&gt; [nick1] [nick2] ...: Get "
 "the users with an affiliation or set users' affiliation with the room."
 msgstr ""
-"affiliate &lt;משתמש&gt; &lt;בעלים|מפעיל|חבר|בגלות|ללא&gt;: קביעת ייחוס משתמש "
-"עם החדר."
-
-#, fuzzy
+"affiliate &lt;משתמש&gt; &lt;בעלים|מפעיל|חבר|בגלות|ללא&gt; [שם1][שם2]...: "
+"שלוף או קבע את ייחוסם של משתמשים עם החדר."
+
 msgid ""
 "role &lt;moderator|participant|visitor|none&gt; [nick1] [nick2] ...: Get the "
 "users with an role or set users' role with the room."
 msgstr ""
-"role &lt;משתמש&gt; &lt;בעלים|מפעיל|חבר|בגלות|ללא&gt;: קביעת ייחוס משתמש עם "
-"החדר."
+"role &lt;משתמש&gt; &lt;בעלים|מפעיל|חבר|בגלות|ללא&gt; [שם1][שם2]...: שלוף או "
+"קבע את ייחוסם של משתמשים עם החדר."
 
 msgid "invite &lt;user&gt; [message]:  Invite a user to the room."
 msgstr "invite &lt;משתמש&gt; [חדר]:  הזמן משתמש לחדר."
@@ -4517,13 +4473,12 @@
 msgstr "שרתי תיווך להעברת קבצים"
 
 msgid "BOSH URL"
-msgstr ""
+msgstr "כתובת BOSH"
 
 #. this should probably be part of global smiley theme settings later on,
 #. shared with MSN
-#, fuzzy
 msgid "Show Custom Smileys"
-msgstr "הצג סמייליים שלי"
+msgstr "הצג חייכנים שלי"
 
 #, c-format
 msgid "%s has left the conversation."
@@ -4581,32 +4536,28 @@
 msgid "_Accept Defaults"
 msgstr "קבל את ברירות המחדל"
 
-#, fuzzy
 msgid "No reason"
-msgstr "לא ניתנה סיבה."
-
-#, fuzzy, c-format
+msgstr "לא ניתנה סיבה"
+
+#, c-format
 msgid "You have been kicked: (%s)"
-msgstr "נבעטת ע\"י: %s (%s)"
-
-#, fuzzy, c-format
+msgstr "נבעטת: (%s)"
+
+#, c-format
 msgid "Kicked (%s)"
-msgstr "נבעט ע\"י %s (%s)"
-
-#, fuzzy
+msgstr "נבעט (%s)"
+
 msgid "An error occurred on the in-band bytestream transfer\n"
-msgstr "ארעה שגיאה בעת פתיחת הקובץ."
-
-#, fuzzy
+msgstr "ארעה שגיאה בעת ההעברה בזרם בתווך\n"
+
 msgid "Transfer was closed."
-msgstr "העברת הקובץ נכשלה"
-
-#, fuzzy
+msgstr "העברת הקובץ נסגרה."
+
 msgid "Failed to open the file"
-msgstr "כישלון בעת פתיחת הקובץ '%s': %s"
+msgstr "כישלון בעת פתיחת הקובץ"
 
 msgid "Failed to open in-band bytestream"
-msgstr ""
+msgstr "כישלון בפתיחת תזרים מידע בתווך"
 
 #, c-format
 msgid "Unable to send file to %s, user does not support file transfers"
@@ -4672,11 +4623,10 @@
 msgstr "אין אפשרות להוסיף \"%s\"."
 
 msgid "Buddy Add error"
-msgstr ""
-
-#, fuzzy
+msgstr "שגיאת הוספת חבר"
+
 msgid "The username specified does not exist."
-msgstr "שם המשתמש שהוזן אינו חוקי."
+msgstr "שם המשתמש שהוזן אינו קיים."
 
 #, c-format
 msgid "Buddy list synchronization issue in %s (%s)"
@@ -4904,9 +4854,8 @@
 msgid "Passport account not yet verified"
 msgstr "חשבון הפספורט לא אומת עדיין"
 
-#, fuzzy
 msgid "Passport account suspended"
-msgstr "חשבון הפספורט לא אומת עדיין"
+msgstr "חשבון הפספורט מושעה"
 
 #, c-format
 msgid "Bad ticket"
@@ -4920,17 +4869,31 @@
 msgid "MSN Error: %s\n"
 msgstr "שגיאת MSN: %s\n"
 
-#, fuzzy
 msgid "Other Contacts"
-msgstr "איש קשר מועדף"
-
-#, fuzzy
+msgstr "אנשי-קשר אחרים"
+
 msgid "Non-IM Contacts"
-msgstr "הסר איש קשר"
-
-#, fuzzy, c-format
+msgstr "אנשי-קשר שאינם להודעות"
+
+#, c-format
+msgid "%s sent a wink. <a href='msn-wink://%s'>Click here to play it</a>"
+msgstr "נשלח קריצה מאת %s. <a href='msn-wink://%s'>יש ללחוץ כאן להפעלתה</a>"
+
+#, c-format
+msgid "%s sent a wink, but it could not be saved"
+msgstr "נשלח קריצה מאת %s, אבל לא ניתן היה לשמור אותה"
+
+#, c-format
+msgid "%s sent a voice clip. <a href='audio://%s'>Click here to play it</a>"
+msgstr "נשלח קטע קולי מאת %s. <a href='audio://%s'>יש ללחוץ כאן להשמיעה</a>"
+
+#, c-format
+msgid "%s sent a voice clip, but it could not be saved"
+msgstr "נשלח אליך קטע קולי מאת %s, אבל היה ניתן לשמור אותו"
+
+#, c-format
 msgid "%s sent you a voice chat invite, which is not yet supported."
-msgstr "%s שלח לך"
+msgstr "נשלחה אליך הזמנה לשיחה קולית מאת %s, אשר אינה נתמכת כעת."
 
 msgid "Nudge"
 msgstr "נו כבר!"
@@ -5002,11 +4965,10 @@
 msgstr "דף"
 
 msgid "Playing a game"
-msgstr ""
-
-#, fuzzy
+msgstr "באמצע משחק"
+
 msgid "Working"
-msgstr "בעבודה"
+msgstr "עובד"
 
 msgid "Has you"
 msgstr "יש אותך"
@@ -5044,13 +5006,11 @@
 msgid "Album"
 msgstr "אלבום"
 
-#, fuzzy
 msgid "Game Title"
-msgstr "שם השיר"
-
-#, fuzzy
+msgstr "שם המשחק"
+
 msgid "Office Title"
-msgstr "שם השיר"
+msgstr "שם המשרד"
 
 msgid "Set Friendly Name..."
 msgstr "קבע/י שם ידידותי..."
@@ -5085,6 +5045,29 @@
 msgid "SSL support is needed for MSN. Please install a supported SSL library."
 msgstr "נדרשת תמיכה ב-SSL עבור MSN. נא להתקין ספריית SSL נתמכת."
 
+#, c-format
+msgid ""
+"Unable to add the buddy %s because the username is invalid.  Usernames must "
+"be a valid email address."
+msgstr ""
+"לא ניתן להוסיף את החבר %s מכיוון ששם המשתמש אינו חוקי. שמות משתמשים מוכרחים "
+"להיות כתובות אימייל תקפות."
+
+msgid "Unable to Add"
+msgstr "לא ניתן להוסיף"
+
+msgid "Authorization Request Message:"
+msgstr "הודעת בקשה להרשאה:"
+
+msgid "Please authorize me!"
+msgstr "בבקשה, אני רוצה הרשאה!"
+
+#. *
+#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons.
+#.
+msgid "_OK"
+msgstr "אישור"
+
 msgid "Error retrieving profile"
 msgstr "שגיאה בשליפת הפרופיל"
 
@@ -5237,9 +5220,8 @@
 "does not exist."
 msgstr "לא יכול למצוא מידע בתוך פרופיל המשתמש. ככל הנראה המשתמש לא קיים."
 
-#, fuzzy
 msgid "View web profile"
-msgstr "החבא כאשר לא-מקוון"
+msgstr "הצג פרופיל ווב"
 
 #. *< type
 #. *< ui_requirement
@@ -5275,20 +5257,20 @@
 msgid "%s just sent you a Nudge!"
 msgstr "%s שלח לך הרגע דחיפה קלה!"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unknown error (%d): %s"
-msgstr "שגיאה לא מוכרת (%d)"
+msgstr "שגיאה לא מוכרת (%d): %s"
 
 msgid "Unable to add user"
 msgstr "לא ניתן להוסיף משתמש"
 
+#. Unknown error!
 #, c-format
 msgid "Unknown error (%d)"
 msgstr "שגיאה לא מוכרת (%d)"
 
-#, fuzzy
 msgid "The following users are missing from your addressbook"
-msgstr "להלן תוצאות החיפוש שלך"
+msgstr "המשתמשים להלן אינם נמצאים בפנקס הכתובות שלך"
 
 msgid "Mobile message was not sent because it was too long."
 msgstr "הודעת לנייד לא נשלחה מכיוון שהיא ארוכה מדי."
@@ -5349,24 +5331,20 @@
 "שגיאת תקשורת משרת %s:\n"
 "%s"
 
-#, fuzzy
 msgid "Our protocol is not supported by the server"
-msgstr "הפרוטוקול שלנו לא נתמך ע\"י השרת."
-
-#, fuzzy
+msgstr "הפרוטוקול שלנו לא נתמך ע\"י השרת"
+
 msgid "Error parsing HTTP"
-msgstr "שגיאה בפיענוח HTTP."
-
-#, fuzzy
+msgstr "שגיאה בפיענוח HTTP"
+
 msgid "You have signed on from another location"
-msgstr "אתה התחברת ממיקום נוסף."
+msgstr "אתה התחברת ממיקום נוסף"
 
 msgid "The MSN servers are temporarily unavailable. Please wait and try again."
 msgstr "שרתי ה-MSN לא זמינים כרגע. אנא נסו מאוחר יותר."
 
-#, fuzzy
 msgid "The MSN servers are going down temporarily"
-msgstr "שרתי ב-MSN זמנית מפסיקים לפעול."
+msgstr "שרתי ה-MSN זמנית מפסיקים לפעול."
 
 #, c-format
 msgid "Unable to authenticate: %s"
@@ -5394,9 +5372,10 @@
 msgid "Retrieving buddy list"
 msgstr "מקבל רשימת אנשי הקשר"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%s requests to view your webcam, but this request is not yet supported."
-msgstr "%s שלח לך"
+msgstr ""
+"נשלחה בקשה מאת %s לצפות במצלמת האינטרנט שלך, אבל בקשה זו אינה נתמכת כרגע."
 
 #, c-format
 msgid "%s has sent you a webcam invite, which is not yet supported."
@@ -5440,13 +5419,11 @@
 msgid "Message may have not been sent because an unknown error occurred:"
 msgstr "ההודעה אולי לא נשלחה מכיוון שאירעה שגיאה לא מוכרת:"
 
-#, fuzzy
 msgid "Delete Buddy from Address Book?"
-msgstr "הוסף לפנקס הכתובות"
-
-#, fuzzy
+msgstr "מחק חבר מפנקס הכתובות?"
+
 msgid "Do you want to delete this buddy from your address book as well?"
-msgstr "האם ברצונך להוסיף את המשתמש הזה לרשימת אנשי הקשר שלך?"
+msgstr "האם ברצונך גם למחוק את המשתמש הזה מפנקס הכתובות שלך?"
 
 msgid "The username specified is invalid."
 msgstr "שם המשתמש שהוזן אינו חוקי."
@@ -5543,11 +5520,8 @@
 msgid "Would you like to set one now? (Note: THIS CANNOT BE CHANGED!)"
 msgstr "האם ברצונך לקבוע אחד כעת? (הערה: לא ניתן לשינוי!)"
 
-#, fuzzy
 msgid "Lost connection with server"
-msgstr ""
-"אבד החיבור עם השרת\n"
-"%s"
+msgstr "אבד החיבור עם השרת"
 
 #. Can't write _()'d strings in array initializers. Workaround.
 #. khc: then use N_() in the array initializer and use _() when they are
@@ -5592,15 +5566,15 @@
 msgid "Protocol error, code %d: %s"
 msgstr "שגיאת פרוטוקול, קוד %d: %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s Your password is %zu characters, which is longer than the maximum length "
 "of %d.  Please shorten your password at http://profileedit.myspace.com/index."
 "cfm?fuseaction=accountSettings.changePassword and try again."
 msgstr ""
-"%s סיסמתך הינה באורך %d תוים, יותר מהאורך המצופה של %d עבור MySpaceIM (מערכת "
-"הודעות מיידיות במייספייס).יש לקצר את הסיסמא בדףhttp://profileedit.myspace."
-"com/index.cfm?fuseaction=accountSettings.changePassword ולנסות שנית."
+"%s סיסמתך הינה באורך %zu תוים, יותר מהאורך המצופה של %d. יש לקצר את הסיסמא "
+"באתר http://profileedit.myspace.com/index.cfm?fuseaction=accountSettings."
+"changePassword ולנסות שנית."
 
 msgid "Incorrect username or password"
 msgstr "שם משתמש או סיסמה שגויים"
@@ -5698,6 +5672,9 @@
 "visit http://editprofile.myspace.com/index.cfm?fuseaction=profile.username "
 "to set your username."
 msgstr ""
+"קרתה שגיאה בעת קביעת שם המשתמש. יש לנסות שנית, או לגשת אל http://editprofile."
+"myspace.com/index.cfm?fuseaction=profile.username על מנת לקבוע את שם המשתמש "
+"שלך."
 
 msgid "MySpaceIM - Username Available"
 msgstr "MySpaceIM - שם המשתמש זמין"
@@ -5953,9 +5930,9 @@
 msgid "Unknown error: 0x%X"
 msgstr "שגיאה לא מוכרת: 0x%X"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to login: %s"
-msgstr "לא ניתן להתחבר"
+msgstr "לא ניתן להתחבר: %s"
 
 #, c-format
 msgid "Unable to send message. Could not get details for user (%s)."
@@ -6085,11 +6062,10 @@
 "%s appears to be offline and did not receive the message that you just sent."
 msgstr "ככל הנראה, %s אינו מחובר ולא קיבל את ההודעה ששלחת הרגע."
 
-#, fuzzy
 msgid ""
 "Unable to connect to server. Please enter the address of the server to which "
 "you wish to connect."
-msgstr "לא ניתן להתחבר לשרת. יש להזין את כתובת השרת שברצונך להתחבר אליו."
+msgstr "לא ניתן להתחבר לשרת. יש להזין את כתובת השרת אליו ברצונך להתחבר."
 
 msgid "This conference has been closed. No more messages can be sent."
 msgstr "ועידה זו נסגרה. לא ניתן לשלוח עוד הודעות."
@@ -6113,9 +6089,8 @@
 msgid "Server port"
 msgstr "פורט השרת"
 
-#, fuzzy
 msgid "Received unexpected response from "
-msgstr "התקבלה תגובת HTTP לא-צפויה מן השרת."
+msgstr "התקבלה תגובה לא-צפויה מאת"
 
 #. username connecting too frequently
 msgid ""
@@ -6125,12 +6100,12 @@
 "התחברת והתנתקת התדירות גבוהה מדיי. המתן 10 דקות ונסה שנית. אם תמשיך לנסות, "
 "תיאלץ להמתין אפילו יותר."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Error requesting "
-msgstr "שגיאה בבקשת אסימון כניסה"
+msgstr "שגיאה בבקשה"
 
 msgid "AOL does not allow your screen name to authenticate here"
-msgstr ""
+msgstr "AOL אינם מאפשרים לאמת את שם המשתמש שלך כאן"
 
 msgid "Could not join chat room"
 msgstr "לא ניתן להתחבר אל חדר הצ'אט"
@@ -6138,9 +6113,8 @@
 msgid "Invalid chat room name"
 msgstr "שם החדר אינו תקף"
 
-#, fuzzy
 msgid "Received invalid data on connection with server"
-msgstr "התקבל מידע שגוי בחיבור עם השרת."
+msgstr "התקבל מידע שגוי בעת חיבור עם השרת."
 
 #. *< type
 #. *< ui_requirement
@@ -6156,7 +6130,7 @@
 msgstr "תוסף פרוטוקולים AIM"
 
 msgid "ICQ UIN..."
-msgstr ""
+msgstr "ICQ UIN..."
 
 #. *< type
 #. *< ui_requirement
@@ -6187,7 +6161,6 @@
 msgid "Received invalid data on connection with remote user."
 msgstr "התקבל מידע שגוי בחיבור עם המשתמש המרוחק."
 
-#, fuzzy
 msgid "Unable to establish a connection with the remote user."
 msgstr "לא ניתן ליצור חיבור עם המשתמש המרוחק."
 
@@ -6387,15 +6360,13 @@
 msgid "Buddy Comment"
 msgstr "הערת איש קשר"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to connect to authentication server: %s"
-msgstr ""
-"לא ניתן להתחבר לשרת האימות:\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "לא ניתן להתחבר לשרת האימות: %s"
+
+#, c-format
 msgid "Unable to connect to BOS server: %s"
-msgstr "לא ניתן להתחבר לשרת"
+msgstr "לא ניתן להתחבר לשרת ה-BOS: %s"
 
 msgid "Username sent"
 msgstr "שם משתמש נשלח"
@@ -6407,19 +6378,19 @@
 msgid "Finalizing connection"
 msgstr "מבצע גימור לחיבור"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to sign on as %s because the username is invalid.  Usernames must be "
 "a valid email address, or start with a letter and contain only letters, "
 "numbers and spaces, or contain only numbers."
 msgstr ""
-"לא ניתן להתחבר: לא היה ניתן להתחבר בתור %s כיוון ששם-תצוגה זה אינו תקף. שמות-"
-"תצוגה חייבים להיות כתובות אימייל חוקיות, או להתחיל באות ולהכיל רק אותיות "
-"מספרים ורווחים, או לחלופין להכיל אך ורק מספרים."
-
-#, fuzzy, c-format
+"לא ניתן להתחבר בתור %s כיוון ששם משתמש זה אינו תקף. שמות משתמשים חייבים "
+"להיות כתובות אימייל חוקיות, או לחילופין להתחיל באות ולהכיל רק אותיות מספרים "
+"ורווחים, או לחילופין להכיל אך ורק מספרים."
+
+#, c-format
 msgid "You may be disconnected shortly.  If so, check %s for updates."
-msgstr "ייתכן ותנותק/י בקרוב. יש לבדוק את %s לעידכונים."
+msgstr "ייתכן ותנותק/י בקרוב. במידה וכך יש לבדוק  %s לעידכונים."
 
 msgid "Unable to get a valid AIM login hash."
 msgstr "לא מצליח להשיג קוד התחברות תקף של AIM."
@@ -6433,35 +6404,32 @@
 #. Unregistered username
 #. uid is not exist
 #. the username does not exist
-#, fuzzy
 msgid "Username does not exist"
-msgstr "המשתמש לא קיים"
+msgstr "שם המשתמש אינו קיים"
 
 #. Suspended account
-#, fuzzy
 msgid "Your account is currently suspended"
-msgstr "חשבונך מושעה כרגע."
+msgstr "חשבונך מושעה כרגע"
 
 #. service temporarily unavailable
 msgid "The AOL Instant Messenger service is temporarily unavailable."
 msgstr "שירות ההודעות של AOL לא זמין כרגע."
 
+#. client too old
 #, c-format
 msgid "The client version you are using is too old. Please upgrade at %s"
 msgstr "גירסת תוכנת הלקוח בה את/ה משתמש/ת ישנה מדי. אנא שדרג/י ב-%s"
 
 #. IP address connecting too frequently
-#, fuzzy
 msgid ""
 "You have been connecting and disconnecting too frequently. Wait a minute and "
 "try again. If you continue to try, you will need to wait even longer."
 msgstr ""
-"התחברת והתנתקת התדירות גבוהה מדיי. המתן 10 דקות ונסה שנית. אם תמשיך לנסות, "
-"תיאלץ להמתין אפילו יותר."
-
-#, fuzzy
+"התחברת והתנתקת בתדירות גבוהה מדיי. יש להמתין דקה ולנסות שנית. אם תמשיכ/י "
+"לנסות, תיאלצ/י להמתין אפילו יותר."
+
 msgid "The SecurID key entered is invalid"
-msgstr "המפתח עבור SecurID אינו תקף."
+msgstr "המפתח SecurID שהוזן אינו תקף."
 
 msgid "Enter SecurID"
 msgstr "יש להזין SecurID"
@@ -6469,12 +6437,6 @@
 msgid "Enter the 6 digit number from the digital display."
 msgstr "יש להזין את קוד 6 הספרות מהתצוגה הדיגיטלית."
 
-#. *
-#. * A wrapper for purple_request_action() that uses @c OK and @c Cancel buttons.
-#.
-msgid "_OK"
-msgstr "אישור"
-
 msgid "Password sent"
 msgstr "הסיסמא נשלחה"
 
@@ -6484,12 +6446,6 @@
 msgid "Please authorize me so I can add you to my buddy list."
 msgstr "בבקשה, תנ/י לי אישור כדי להוסיף אותך לרשימת אנשי הקשר שלי."
 
-msgid "Authorization Request Message:"
-msgstr "הודעת בקשה להרשאה:"
-
-msgid "Please authorize me!"
-msgstr "בבקשה, אני רוצה הרשאה!"
-
 msgid "No reason given."
 msgstr "לא ניתנה סיבה."
 
@@ -6792,22 +6748,18 @@
 msgid "Away message too long."
 msgstr "הודעת הריחוק מהמחשב ארוכה מדי."
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to add the buddy %s because the username is invalid.  Usernames must "
 "be a valid email address, or start with a letter and contain only letters, "
 "numbers and spaces, or contain only numbers."
 msgstr ""
-"לא ניתן להוסיף את איש הקשר %s מכיוון ששם-התצוגה שלו לא חוקי. שמות-תצוגה "
-"חייבים להתחיל באות ולהכיל רק אותיות, מספרים ורווחים, או רק להכיל מספרים."
-
-#, fuzzy
-msgid "Unable to Add"
-msgstr "לא ניתן להוסיף"
-
-#, fuzzy
+"לא ניתן להוסיף את החבר %s מכיוון ששם המשתמש שלו לא חוקי. שמות-משתמשים "
+"מוכרחים להיות כתובות אימייל תקפות, או לחילופין להתחיל באות ולהכיל רק אותיות, "
+"מספרים ורווחים, או לחילופין להכיל רק מספרים."
+
 msgid "Unable to Retrieve Buddy List"
-msgstr "כשלון בשליפת רשימת אנשי הקשר"
+msgstr "לא ניתן לשלוף את רשימת החברים"
 
 msgid ""
 "The AIM servers were temporarily unable to send your buddy list.  Your buddy "
@@ -6819,20 +6771,20 @@
 msgid "Orphans"
 msgstr "יתומים"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Unable to add the buddy %s because you have too many buddies in your buddy "
 "list.  Please remove one and try again."
 msgstr ""
-"לא ניתן להוסיף את %s לרשימת אנשי הקשר שלך, כיוון שיש יותר מדי אנשי קשר "
-"ברשימה. יש להסיר אחד ולנסות שנית."
+"לא ניתן להוסיף את %s לרשימת החברים שלך, כיוון שיש יותר מדי חברים ברשימה. יש "
+"להסיר אחד ולנסות שנית."
 
 msgid "(no name)"
 msgstr "(ללא שם)"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to add the buddy %s for an unknown reason."
-msgstr "לא היה ניתן להוסיף את איש הקשר %s מסיבה לא ידועה."
+msgstr "לא ניתן להוסיף את החבר%s מסיבה לא ידועה."
 
 #, c-format
 msgid ""
@@ -6987,9 +6939,8 @@
 msgid "Search for Buddy by Information"
 msgstr "חפש איש-קשר עפ\"י מידע"
 
-#, fuzzy
 msgid "Use clientLogin"
-msgstr "המשתמש לא מחובר"
+msgstr "השתמש ב-clientLogin"
 
 msgid ""
 "Always use AIM/ICQ proxy server for\n"
@@ -7102,16 +7053,14 @@
 msgid "Other"
 msgstr "אחר"
 
-#, fuzzy
 msgid "Visible"
-msgstr "בלתי נראה"
+msgstr "נראה"
 
 msgid "Friend Only"
-msgstr ""
-
-#, fuzzy
+msgstr "חבר בלבד"
+
 msgid "Private"
-msgstr "פרטיות"
+msgstr "פרטי"
 
 msgid "QQ Number"
 msgstr "מספר QQ"
@@ -7128,9 +7077,8 @@
 msgid "Phone Number"
 msgstr "מםפר טלפון"
 
-#, fuzzy
 msgid "Authorize adding"
-msgstr "לתת אישור לחבר?"
+msgstr "אישור הוספה"
 
 msgid "Cellphone Number"
 msgstr "מםפר פלאפון"
@@ -7138,64 +7086,50 @@
 msgid "Personal Introduction"
 msgstr "הצגה אישית"
 
-#, fuzzy
 msgid "City/Area"
-msgstr "עיר"
-
-#, fuzzy
+msgstr "עיר/איזור"
+
 msgid "Publish Mobile"
-msgstr "טלפון נייד"
-
-#, fuzzy
+msgstr "פרסם טל. נייד"
+
 msgid "Publish Contact"
-msgstr "שם נוסף לאיש קשר"
+msgstr "פרסם איש-קשר"
 
 msgid "College"
 msgstr "מכללה"
 
-#, fuzzy
 msgid "Horoscope"
-msgstr "סמל הורוסקופ"
-
-#, fuzzy
+msgstr "הורוסקופ"
+
 msgid "Zodiac"
-msgstr "סמל מן המזלות"
-
-#, fuzzy
+msgstr "גלגל המזלות"
+
 msgid "Blood"
-msgstr "חסום"
-
-#, fuzzy
+msgstr "סוג דם"
+
 msgid "True"
-msgstr "שור"
-
-#, fuzzy
+msgstr "אמת"
+
 msgid "False"
-msgstr "נכשל"
-
-#, fuzzy
+msgstr "שקר"
+
 msgid "Modify Contact"
-msgstr "עריכת החשבון"
-
-#, fuzzy
+msgstr "ערוך איש-קשר"
+
 msgid "Modify Address"
-msgstr "כתובת בבית"
-
-#, fuzzy
+msgstr "ערוך כתובת"
+
 msgid "Modify Extended Information"
-msgstr "ערוך את המידע שלי"
-
-#, fuzzy
+msgstr "ערוך מידע נוסף"
+
 msgid "Modify Information"
-msgstr "ערוך את המידע שלי"
-
-#, fuzzy
+msgstr "ערוך מידע"
+
 msgid "Update"
-msgstr "עודכן לאחרונה"
-
-#, fuzzy
+msgstr "עדכן"
+
 msgid "Could not change buddy information."
-msgstr "יש להזין מידע על איש הקשר."
+msgstr "לא ניתן לשנות מידע של החבר."
 
 msgid "Mobile"
 msgstr "נייד"
@@ -7204,99 +7138,84 @@
 msgstr "הערה"
 
 #. callback
-#, fuzzy
 msgid "Buddy Memo"
-msgstr "סמל איש הקשר"
+msgstr "מזכר חבר"
 
 msgid "Change his/her memo as you like"
-msgstr ""
-
-#, fuzzy
+msgstr "ניתן לערוך את הטקסט של החבר כרצונך"
+
 msgid "_Modify"
-msgstr "ערוך"
-
-#, fuzzy
+msgstr "_ערוך"
+
 msgid "Memo Modify"
-msgstr "ערוך"
-
-#, fuzzy
+msgstr "עריכת מזכר"
+
 msgid "Server says:"
-msgstr "שרת עסוק"
+msgstr "השרת אומר:"
 
 msgid "Your request was accepted."
-msgstr ""
+msgstr "בקשתך נתקבלה."
 
 msgid "Your request was rejected."
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "בקשתך נדחתה."
+
+#, c-format
 msgid "%u requires verification"
-msgstr "דרוש הרשאה"
-
-#, fuzzy
+msgstr "נדרש אימות מאת %u"
+
 msgid "Add buddy question"
-msgstr "להוסיף את איש הקשר לרשימה שלך?"
-
-#, fuzzy
+msgstr "הוסף שאלת חבר"
+
 msgid "Enter answer here"
-msgstr "יש להזין את הבקשה כאו"
+msgstr "יש להזין את התשובה כאן"
 
 msgid "Send"
 msgstr "שלח"
 
-#, fuzzy
 msgid "Invalid answer."
-msgstr "שם משתמש לא תקף."
+msgstr "תשובה לא תקפה."
 
 msgid "Authorization denied message:"
 msgstr "הודעת סירוב הרשאה:"
 
-#, fuzzy
 msgid "Sorry, you're not my style."
-msgstr "סליחה, את/ה לא הטיפוס שלי..."
-
-#, fuzzy, c-format
+msgstr "סליחה, את/ה לא הטיפוס שלי."
+
+#, c-format
 msgid "%u needs authorization"
-msgstr "משתמש %d דורש אימות"
-
-#, fuzzy
+msgstr "%u דורש אימות"
+
 msgid "Add buddy authorize"
-msgstr "להוסיף את איש הקשר לרשימה שלך?"
-
-#, fuzzy
+msgstr "הוסף אימות חבר"
+
 msgid "Enter request here"
-msgstr "יש להזין את הבקשה כאו"
+msgstr "יש להזין את הבקשה כאן"
 
 msgid "Would you be my friend?"
 msgstr "התרצ/י להיות ידיד/ה שלי?"
 
-#, fuzzy
 msgid "QQ Buddy"
-msgstr "איש הקשר"
-
-#, fuzzy
+msgstr "חבר QQ"
+
 msgid "Add buddy"
-msgstr "הוסף איש קשר"
-
-#, fuzzy
+msgstr "הוסף חבר"
+
 msgid "Invalid QQ Number"
-msgstr "פרצוף QQ לא תקף"
-
-#, fuzzy
+msgstr "מספר QQ לא תקף"
+
 msgid "Failed sending authorize"
-msgstr "בבקשה, אני רוצה הרשאה!"
-
-#, fuzzy, c-format
+msgstr "כשל בשליחת אישור"
+
+#, c-format
 msgid "Failed removing buddy %u"
-msgstr "כשל בהסרת איש-קשר"
-
-#, fuzzy, c-format
+msgstr "כשל בהסרת חבר %u"
+
+#, c-format
 msgid "Failed removing me from %d's buddy list"
-msgstr "%s הסיר/ה אותך מרשימת אנשי הקשר שלו או שלה."
-
-#, fuzzy
+msgstr "כשל בהסרתי מרשימת החברים של %d"
+
 msgid "No reason given"
-msgstr "לא ניתנה סיבה."
+msgstr "לא ניתנה סיבה"
 
 #. only need to get value
 #, c-format
@@ -7306,9 +7225,9 @@
 msgid "Would you like to add him?"
 msgstr "האם ברצונך להוסיף אותו?"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Rejected by %s"
-msgstr "דחה"
+msgstr "נדחה על ידי %s"
 
 #, c-format
 msgid "Message: %s"
@@ -7323,88 +7242,73 @@
 msgid "QQ Qun"
 msgstr "QQ Qun"
 
-#, fuzzy
 msgid "Please enter Qun number"
-msgstr "אנא הזן את השם חדש עבור %s"
-
-#, fuzzy
+msgstr "יש להזין מספר Qun"
+
 msgid "You can only search for permanent Qun\n"
-msgstr "ניתן לחפש רק קבוצות QQ קבועות\n"
-
-#, fuzzy
+msgstr "ניתן לחפש רק Qun קבועות\n"
+
 msgid "(Invalid UTF-8 string)"
-msgstr "הגדרות לא תקפות של מתווכים"
-
-#, fuzzy
+msgstr "(מחרוזת UTF-8 שגויה)"
+
 msgid "Not member"
-msgstr "אני אינני חבר/ה"
+msgstr "לא חבר בקבוצה"
 
 msgid "Member"
 msgstr "חבר"
 
-#, fuzzy
 msgid "Requesting"
-msgstr "חלון בקשה"
-
-#, fuzzy
+msgstr "מבקש"
+
 msgid "Admin"
-msgstr "Adium"
-
-#, fuzzy
+msgstr "מנהל"
+
 msgid "Notice"
-msgstr "הערה"
-
-#, fuzzy
+msgstr "הודעה"
+
 msgid "Detail"
-msgstr "ברירת המחדל"
+msgstr "פרטים"
 
 msgid "Creator"
 msgstr "יוצר"
 
-#, fuzzy
 msgid "About me"
-msgstr "אודות %s"
-
-#, fuzzy
+msgstr "אודותי"
+
 msgid "Category"
-msgstr "שגיאה בצ'אט"
-
-#, fuzzy
+msgstr "קטגוריה"
+
 msgid "The Qun does not allow others to join"
-msgstr "קבוצה זו לא מאשרת לאחרים להצטרף"
-
-#, fuzzy
+msgstr "ה-Qnn הזו לא מאשרת לאחרים להצטרף"
+
 msgid "Join QQ Qun"
-msgstr "הצטרף לצ'אט"
+msgstr "הצטרף אל QQ Qun"
 
 msgid "Input request here"
 msgstr "יש להזין את הבקשה כאו"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Successfully joined Qun %s (%u)"
-msgstr "שינית בהצלחה את החבר-Qun"
-
-#, fuzzy
+msgstr "צורף בהצלחה אל Qun %s (%u)"
+
 msgid "Successfully joined Qun"
-msgstr "שינית בהצלחה את החבר-Qun"
+msgstr "צורף בהצלחה אל Qun"
 
 #, c-format
 msgid "Qun %u denied from joining"
-msgstr ""
+msgstr "Qun %u נאסר מלהצטרף"
 
 msgid "QQ Qun Operation"
 msgstr "פעולת QQ Qun"
 
-#, fuzzy
 msgid "Failed:"
-msgstr "נכשל"
+msgstr "נכשל:"
 
 msgid "Join Qun, Unknown Reply"
-msgstr ""
-
-#, fuzzy
+msgstr "תשובה לא מוכרת, Join Qun"
+
 msgid "Quit Qun"
-msgstr "QQ Qun"
+msgstr "יציאה מה-Qun"
 
 msgid ""
 "Note, if you are the creator, \n"
@@ -7413,51 +7317,47 @@
 "יש לשים לב, כי אם את/ה היוצר/ת, \n"
 "פעולה זו תביא בסופו של דבר להסרת ה-Qun."
 
-#, fuzzy
 msgid "Sorry, you are not our style"
-msgstr "סליחה, את/ה לא הטיפוס שלי..."
-
-#, fuzzy
+msgstr "סליחה, את/ה לא הטיפוס שלנו"
+
 msgid "Successfully changed Qun members"
-msgstr "שינית בהצלחה את החבר-Qun"
-
-#, fuzzy
+msgstr "שינית בהצלחה את חברי ה-Qun"
+
 msgid "Successfully changed Qun information"
 msgstr "שינית בהצלחה מידע של ה-Qun"
 
 msgid "You have successfully created a Qun"
 msgstr "יצרת בהצלחה Qun"
 
-#, fuzzy
 msgid "Would you like to set up detailed information now?"
-msgstr "האם ברצונך לקבוע את פרטי ה-Qun כעת?"
+msgstr "האם ברצונך כעת לקבוע את הפרטים?"
 
 msgid "Setup"
 msgstr "הגדרות"
 
-#, fuzzy, c-format
+#, c-format
 msgid "%u requested to join Qun %u for %s"
-msgstr "המשתמש %d ביקש להצטרף לקבוצה %d"
-
-#, fuzzy, c-format
+msgstr "%u ביקש להצטרף אל Qun %u בשביל %s"
+
+#, c-format
 msgid "%u request to join Qun %u"
-msgstr "המשתמש %d ביקש להצטרף לקבוצה %d"
-
-#, fuzzy, c-format
+msgstr "%u ביקש להצטרף אל Qun %u"
+
+#, c-format
 msgid "Failed to join Qun %u, operated by admin %u"
-msgstr "כישלון בהצטרפות לאיש קשר בצ'אט"
+msgstr "כשל בצטרפות אל Qun %u, המופעל על ידי המנהל %u"
 
 #, c-format
 msgid "<b>Joining Qun %u is approved by admin %u for %s</b>"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "<b>הצטרפות אל Qun %u מאושרת על ידי המנהל %u עבור %s</b>"
+
+#, c-format
 msgid "<b>Removed buddy %u.</b>"
-msgstr "הסר איש קשר"
-
-#, fuzzy, c-format
+msgstr "<b>הוסר חבר %u.</b>"
+
+#, c-format
 msgid "<b>New buddy %u joined.</b>"
-msgstr "הסר איש קשר"
+msgstr "<b>חבר חדש %u הצטרף.</b>"
 
 #, c-format
 msgid "Unknown-%d"
@@ -7481,9 +7381,8 @@
 msgid " Video"
 msgstr " וידאו"
 
-#, fuzzy
 msgid " Zone"
-msgstr "ללא"
+msgstr "איזור"
 
 msgid "Flag"
 msgstr "דגל"
@@ -7494,121 +7393,113 @@
 msgid "Invalid name"
 msgstr "שם משתמש שגוי"
 
-#, fuzzy
 msgid "Select icon..."
-msgstr "בחירת תיקיה..."
-
-#, fuzzy, c-format
+msgstr "בחירת סמל..."
+
+#, c-format
 msgid "<b>Login time</b>: %d-%d-%d, %d:%d:%d<br>\n"
-msgstr "<b>זמן כניסה</b>: %s<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>זמן כניסה</b>: %d-%d-%d, %d:%d:%d<br>\n"
+
+#, c-format
 msgid "<b>Total Online Buddies</b>: %d<br>\n"
-msgstr "<b>כרגע מחוברים</b>: %d<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>סך-הכל חברים מחוברים</b>: %d<br>\n"
+
+#, c-format
 msgid "<b>Last Refresh</b>: %d-%d-%d, %d:%d:%d<br>\n"
-msgstr "<b>עידכון אחרון</b>: %s<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>עידכון אחרון</b>: %d-%d-%d, %d:%d:%d<br>\n"
+
+#, c-format
 msgid "<b>Server</b>: %s<br>\n"
-msgstr "<b>שרת</b>: %s: %d<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>שרת</b>: %s<br>\n"
+
+#, c-format
 msgid "<b>Client Tag</b>: %s<br>\n"
-msgstr "<b>זמן כניסה</b>: %s<br>\n"
+msgstr "<b>תגית לקוח</b>: %s<br>\n"
 
 #, c-format
 msgid "<b>Connection Mode</b>: %s<br>\n"
 msgstr "<b>סוג החיבור</b>: %s<br>\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "<b>My Internet IP</b>: %s:%d<br>\n"
-msgstr "<b>סוג החיבור</b>: %s<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>כתובתי באינטרנט</b>: %s:%d<br>\n"
+
+#, c-format
 msgid "<b>Sent</b>: %lu<br>\n"
-msgstr "<b>שרת</b>: %s: %d<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>נשלח</b>: %lu<br>\n"
+
+#, c-format
 msgid "<b>Resend</b>: %lu<br>\n"
-msgstr "<b>עידכון אחרון</b>: %s<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>נשלח שוב</b>: %lu<br>\n"
+
+#, c-format
 msgid "<b>Lost</b>: %lu<br>\n"
-msgstr "<b>עידכון אחרון</b>: %s<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>אבד</b>: %lu<br>\n"
+
+#, c-format
 msgid "<b>Received</b>: %lu<br>\n"
-msgstr "<b>שרת</b>: %s: %d<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>התקבל</b>: %lu<br>\n"
+
+#, c-format
 msgid "<b>Received Duplicate</b>: %lu<br>\n"
-msgstr "<b>כתובתי המפורסמת</b>: %s<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>התקבל במכופל</b>: %lu<br>\n"
+
+#, c-format
 msgid "<b>Time</b>: %d-%d-%d, %d:%d:%d<br>\n"
-msgstr "<b>זמן כניסה</b>: %s<br>\n"
-
-#, fuzzy, c-format
+msgstr "<b>זמן</b>: %d-%d-%d, %d:%d:%d<br>\n"
+
+#, c-format
 msgid "<b>IP</b>: %s<br>\n"
-msgstr "<b>שרת</b>: %s: %d<br>\n"
+msgstr "<b>IP</b>: %s<br>\n"
 
 msgid "Login Information"
 msgstr "מידע על הכניסה"
 
 msgid "<p><b>Original Author</b>:<br>\n"
-msgstr ""
+msgstr "<p><b>מחבר מקורי</b>:<br>\n"
 
 msgid "<p><b>Code Contributors</b>:<br>\n"
-msgstr ""
-
-#, fuzzy
+msgstr "<p><b>תורמי קוד</b>:<br>\n"
+
 msgid "<p><b>Lovely Patch Writers</b>:<br>\n"
-msgstr "<b>עידכון אחרון</b>: %s<br>\n"
-
-#, fuzzy
+msgstr "<p><b>כותבי-טלאי נפלאים</b>:<br>\n"
+
 msgid "<p><b>Acknowledgement</b>:<br>\n"
-msgstr "<b>שרת</b>: %s: %d<br>\n"
-
-#, fuzzy
+msgstr "<p><b>הכרת-תודה</b>:<br>\n"
+
 msgid "<p><b>Scrupulous Testers</b>:<br>\n"
-msgstr "<b>עידכון אחרון</b>: %s<br>\n"
+msgstr "<p><b>בודקי-תוכנה קפדניים</b>:<br>\n"
 
 msgid "and more, please let me know... thank you!))"
-msgstr ""
+msgstr "ועוד, אנא הודיעו לי... תודה!))"
 
 msgid "<p><i>And, all the boys in the backroom...</i><br>\n"
-msgstr ""
+msgstr "<p><i>וכן, כל החבר'ה בחדר האחורי...</i><br>\n"
 
 msgid "<i>Feel free to join us!</i> :)"
-msgstr ""
-
-#, fuzzy, c-format
+msgstr "<i>הרגישו חופשי להצטרף אלינו!</i> :)"
+
+#, c-format
 msgid "About OpenQ %s"
-msgstr "אודות %s"
-
-#, fuzzy
+msgstr "אודות OpenQ %s"
+
 msgid "Change Icon"
-msgstr "שמירת סמל"
+msgstr "שנה סמל"
 
 msgid "Change Password"
 msgstr "שנה סיסמא"
 
-#, fuzzy
 msgid "Account Information"
-msgstr "מידע על הכניסה"
+msgstr "מידע על החשבון"
 
 msgid "Update all QQ Quns"
-msgstr ""
-
-#, fuzzy
+msgstr "עדכן את כל QQ Quns"
+
 msgid "About OpenQ"
-msgstr "אודות %s"
-
-#, fuzzy
+msgstr "אודות OpenQ"
+
 msgid "Modify Buddy Memo"
-msgstr "כתובת בבית"
+msgstr "ערוך מזכר על החבר"
 
 #. *< type
 #. *< ui_requirement
@@ -7620,57 +7511,48 @@
 #. *< version
 #. *  summary
 #. *  description
-#, fuzzy
 msgid "QQ Protocol Plugin"
-msgstr "פרוטוקול QQ\tתוסף"
-
-#, fuzzy
+msgstr "פרוטוקול תוסף QQ"
+
 msgid "Auto"
-msgstr "מחבר"
-
-#, fuzzy
+msgstr "אוטומטי"
+
 msgid "Select Server"
-msgstr "בחר משתמש"
+msgstr "בחר שרת"
 
 msgid "QQ2005"
-msgstr ""
+msgstr "QQ2005"
 
 msgid "QQ2007"
-msgstr ""
+msgstr "QQ2007"
 
 msgid "QQ2008"
-msgstr ""
-
-#, fuzzy
+msgstr "QQ2008"
+
 msgid "Connect by TCP"
-msgstr "מתחבר בעזרת TCP"
-
-#, fuzzy
+msgstr "התחבר בעזרת TCP"
+
 msgid "Show server notice"
-msgstr "פורט השרת"
-
-#, fuzzy
+msgstr "הצג הודעת שרת"
+
 msgid "Show server news"
-msgstr "כתובת שרת"
+msgstr "הצג חדשות שרת"
 
 msgid "Show chat room when msg comes"
-msgstr ""
-
-#, fuzzy
+msgstr "הצג חדר-צ'אט כשמתקבלת הודעה"
+
 msgid "Keep alive interval (seconds)"
-msgstr "פרקי-זמן להודעות הישאר-בחיים"
-
-#, fuzzy
+msgstr "פרקי-זמן להודעות הישאר-בחיים (בשניות)"
+
 msgid "Update interval (seconds)"
-msgstr "פרק זמן בין עידכונים"
-
-#, fuzzy
+msgstr "פרק זמן בין עידכונים (שניות)"
+
 msgid "Unable to decrypt server reply"
-msgstr "אין אפשרות לפיענוח המשוב בעת אימות משתמש"
+msgstr "אין אפשרות לפענוח המשוב מהשרת"
 
 #, c-format
 msgid "Failed requesting token, 0x%02X"
-msgstr ""
+msgstr "כישלון בבקשת token, 0x%02X"
 
 #, c-format
 msgid "Invalid token len, %d"
@@ -7678,135 +7560,122 @@
 
 #. extend redirect used in QQ2006
 msgid "Redirect_EX is not currently supported"
-msgstr ""
+msgstr "Redirect_EX אינו נתמך כרגע"
 
 #. need activation
 #. need activation
 #. need activation
-#, fuzzy
 msgid "Activation required"
-msgstr "נדרשת הרשמה"
-
-#, fuzzy, c-format
+msgstr "נדרשת הפעלה"
+
+#, c-format
 msgid "Unknown reply code when logging in (0x%02X)"
-msgstr "קוד-תגובה שגוי, 0x%02X"
-
-#, fuzzy
+msgstr "משוב לא מוכר בעת התחברות (0x%02X)"
+
 msgid "Requesting captcha"
-msgstr "מבקש/ת את תשומת-הלב של %s..."
-
-#, fuzzy
+msgstr "מבקש וידוא-אדם"
+
 msgid "Checking captcha"
-msgstr "מבקש/ת את תשומת-הלב של %s..."
-
-#, fuzzy
+msgstr "בודק וידוא-אדם"
+
 msgid "Failed captcha verification"
-msgstr "כישלון באימות מול Yahoo!"
-
-#, fuzzy
+msgstr "כישלון וידוא-אדם"
+
 msgid "Captcha Image"
-msgstr "שמור תמונה"
-
-#, fuzzy
+msgstr "תמונת captcha"
+
 msgid "Enter code"
-msgstr "הזן סיסמא"
-
-#, fuzzy
+msgstr "הזן קוד"
+
 msgid "QQ Captcha Verification"
-msgstr "וידוא תעודת SSL"
-
-#, fuzzy
+msgstr "וידוא-אדם של QQ"
+
 msgid "Enter the text from the image"
-msgstr "יש להזין את שם הקבוצה"
-
-#, fuzzy, c-format
+msgstr "יש להזין את הטקסט מהתמונה"
+
+#, c-format
 msgid "Unknown reply when checking password (0x%02X)"
-msgstr "קוד-תגובה שגוי, 0x%02X"
-
-#, fuzzy, c-format
+msgstr "משוב לא מוכר בעת בדיקת סיסמא (0x%02X)"
+
+#, c-format
 msgid ""
 "Unknown reply code when logging in (0x%02X):\n"
 "%s"
-msgstr "קוד-תגובה שגוי, 0x%02X"
+msgstr ""
+"קוד-משוב לא מוכר בעת התחברות (0x%02X):\n"
+"%s"
 
 msgid "Socket error"
 msgstr "שגיאת שקע"
 
-#, fuzzy
 msgid "Getting server"
-msgstr "קבע את המידע על המשתמש..."
-
-#, fuzzy
+msgstr "שולף שרת"
+
 msgid "Requesting token"
-msgstr "הבקשה נדחית"
-
-#, fuzzy
+msgstr "מבקש סמלון"
+
 msgid "Unable to resolve hostname"
-msgstr "לא ניתן להתחבר לשרת"
-
-#, fuzzy
+msgstr "לא ניתן לתרגם את שם השרת לכתובת"
+
 msgid "Invalid server or port"
-msgstr "מספר שגיאה לא תקף."
-
-#, fuzzy
+msgstr "שרת או יציאה לא-חוקיים"
+
 msgid "Connecting to server"
-msgstr "מתחבר לשרת ה-SILC"
-
-#, fuzzy
+msgstr "מתחבר לשרת"
+
 msgid "QQ Error"
-msgstr "שגיאת QQid"
-
-#, fuzzy, c-format
+msgstr "שגיאת QQ"
+
+#, c-format
 msgid ""
 "Server News:\n"
 "%s\n"
 "%s\n"
 "%s"
-msgstr "ניתוב שרת ICQ"
-
-#, fuzzy, c-format
+msgstr ""
+"חדשות שרת:\n"
+"%s\n"
+"%s\n"
+"%s"
+
+#, c-format
 msgid "%s:%s"
-msgstr "%s (%s)"
-
-#, fuzzy, c-format
+msgstr "%s:%s"
+
+#, c-format
 msgid "From %s:"
-msgstr "מאת"
-
-#, fuzzy, c-format
+msgstr "מאת %s:"
+
+#, c-format
 msgid ""
 "Server notice From %s: \n"
 "%s"
-msgstr "הנחיות שרת: %s"
-
-#, fuzzy
+msgstr ""
+"הודעת שרת מאת %s: \n"
+"%s"
+
 msgid "Unknown SERVER CMD"
-msgstr "סיבה לא ידועה"
-
-#, fuzzy, c-format
+msgstr "SERVER CMD לא מוכר"
+
+#, c-format
 msgid ""
 "Error reply of %s(0x%02X)\n"
 "Room %u, reply 0x%02X"
 msgstr ""
-"משוב %s(0x%02X )\n"
-"נשלח %s(0x%02X )\n"
-"מזהה חדר %d, משוב [0x%02X]: \n"
-"%s"
-
-#, fuzzy
+"משוב שגיאה של %s(0x%02X)\n"
+"חדר %u, משוב 0x%02X"
+
 msgid "QQ Qun Command"
-msgstr "פקודה"
-
-#, fuzzy
+msgstr "פקודת QQ Qun"
+
 msgid "Unable to decrypt login reply"
-msgstr "אין אפשרות לפיענוח המשוב בעת אימות משתמש"
-
-#, fuzzy
+msgstr "אין אפשרות לפענוח המשוב לניסיון ההתחברות"
+
 msgid "Unknown LOGIN CMD"
-msgstr "סיבה לא ידועה"
-
-#, fuzzy
+msgstr "LOGIN CMD לא מוכר"
+
 msgid "Unknown CLIENT CMD"
-msgstr "סיבה לא ידועה"
+msgstr "CLIENT CMD לא מוכר"
 
 #, c-format
 msgid "%d has declined the file %s"
@@ -8767,7 +8636,6 @@
 msgid "Disconnected by server"
 msgstr "נותק ע\"י השרת"
 
-#, fuzzy
 msgid "Error connecting to SILC Server"
 msgstr "שגיאה בעת התחברות לשרת ה-SILC"
 
@@ -8781,7 +8649,6 @@
 msgid "Performing key exchange"
 msgstr "מבצע החלפת מפתחות"
 
-#, fuzzy
 msgid "Unable to load SILC key pair"
 msgstr "לא ניתן לטעון את זוג מפתחות ה-SILC"
 
@@ -8789,14 +8656,9 @@
 msgid "Connecting to SILC Server"
 msgstr "מתחבר לשרת ה-SILC"
 
-#, fuzzy
-msgid "Unable to not load SILC key pair"
-msgstr "לא ניתן לטעון את זוג מפתחות ה-SILC"
-
 msgid "Out of memory"
 msgstr "אזל הזיכרון"
 
-#, fuzzy
 msgid "Unable to initialize SILC protocol"
 msgstr "לא ניתן לאתחל את פרוטוקול SILC"
 
@@ -9084,9 +8946,8 @@
 msgid "Creating SILC key pair..."
 msgstr "יוצר זוג מפתחות SILC..."
 
-#, fuzzy
 msgid "Unable to create SILC key pair"
-msgstr "לא יכול ליצור זוג מפתחות SILC\n"
+msgstr "לא ניתן ליצור זוג מפתחות SILC"
 
 #. Hint for translators: Please check the tabulator width here and in
 #. the next strings (short strings: 2 tabs, longer strings 1 tab,
@@ -9222,34 +9083,30 @@
 msgid "Failure: Authentication failed"
 msgstr "שגיאה: האימות נכשל"
 
-#, fuzzy
 msgid "Unable to initialize SILC Client connection"
 msgstr "לא ניתן לאתחל חיבור לקוח של SILC"
 
 msgid "John Noname"
 msgstr "פלוני אלמוני"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to load SILC key pair: %s"
 msgstr "לא ניתן לטעון את זוג מפתחות ה-SILC: %s"
 
 msgid "Unable to create connection"
 msgstr "לא ניתן ליצור חיבור"
 
-#, fuzzy
 msgid "Unknown server response"
-msgstr "תגובת שרת לא ידועה."
-
-#, fuzzy
+msgstr "תגובת שרת לא מוכרת"
+
 msgid "Unable to create listen socket"
-msgstr "אין אפשרות ליצור שקע"
+msgstr "אין אפשרות ליצור שקע-קשב"
 
 msgid "SIP usernames may not contain whitespaces or @ symbols"
 msgstr "אסור לשמות משתמשים של SIP להכיל רווחים או סמלי @"
 
-#, fuzzy
 msgid "SIP connect server not specified"
-msgstr "פורט השרת"
+msgstr "לא הוגדר שרת חיבור SIP"
 
 #. *< type
 #. *< ui_requirement
@@ -9293,9 +9150,8 @@
 msgid "doodle: Request user to start a Doodle session"
 msgstr "doodle: לבקש מהמשתמש להתחיל ב- Doodle"
 
-#, fuzzy
 msgid "Yahoo ID..."
-msgstr "Yahoo! ID"
+msgstr "Yahoo ID..."
 
 #. *< type
 #. *< ui_requirement
@@ -9307,9 +9163,8 @@
 #. *< version
 #. *  summary
 #. *  description
-#, fuzzy
 msgid "Yahoo! Protocol Plugin"
-msgstr "תוסף פרוטוקול Yahoo"
+msgstr "תוסף פרוטוקול Yahoo!"
 
 msgid "Pager server"
 msgstr "שרת ה-Pager"
@@ -9338,9 +9193,8 @@
 msgid "Yahoo Chat port"
 msgstr "כניסת שרת Yahoo"
 
-#, fuzzy
 msgid "Yahoo JAPAN ID..."
-msgstr "Yahoo! ID"
+msgstr "Yahoo יפן ID"
 
 #. *< type
 #. *< ui_requirement
@@ -9352,12 +9206,11 @@
 #. *< version
 #. *  summary
 #. *  description
-#, fuzzy
 msgid "Yahoo! JAPAN Protocol Plugin"
-msgstr "תוסף פרוטוקול Yahoo"
+msgstr "תוסף פרוטוקול Yahoo! יפן"
 
 msgid "Your SMS was not delivered"
-msgstr ""
+msgstr "הסמס שלך לא הגיע ליעדו"
 
 msgid "Your Yahoo! message did not get sent."
 msgstr "הודעת ה Yahoo שלך לא נשלחה."
@@ -9382,28 +9235,26 @@
 msgstr "הוספת איש קשר נדחתה"
 
 #. Some error in the received stream
-#, fuzzy
 msgid "Received invalid data"
-msgstr "התקבל מידע שגוי בחיבור עם השרת."
+msgstr "התקבל מידע שגוי"
 
 #. security lock from too many failed login attempts
-#, fuzzy
 msgid ""
 "Account locked: Too many failed login attempts.  Logging into the Yahoo! "
 "website may fix this."
-msgstr "שגיאה לא מוכרת מספר %d. התחברות באתר Yahoo! אולי יתקן את זה."
+msgstr ""
+"החשבון נעול: יותר מדי ניסיון התחברות כושלים. התחברות באתר Yahoo! אולי תתקן "
+"את זה."
 
 #. indicates a lock of some description
-#, fuzzy
 msgid ""
 "Account locked: Unknown reason.  Logging into the Yahoo! website may fix "
 "this."
-msgstr "שגיאה לא מוכרת מספר %d. התחברות באתר Yahoo! אולי יתקן את זה."
+msgstr "החשבון נעול: סיבה לא ידועה. התחברות באתר Yahoo! אולי תתקן את זה."
 
 #. username or password missing
-#, fuzzy
 msgid "Username or password missing"
-msgstr "שם משתמש או סיסמה שגויים"
+msgstr "שם משתמש או סיסמה חסרים"
 
 #, c-format
 msgid ""
@@ -9435,33 +9286,27 @@
 msgid "Unknown error number %d. Logging into the Yahoo! website may fix this."
 msgstr "שגיאה לא מוכרת מספר %d. התחברות באתר Yahoo! אולי יתקן את זה."
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to add buddy %s to group %s to the server list on account %s."
-msgstr "לא ניתן להוסיף את איש הקשר %s לקבוצה %s ברשימה על השרת בחשבון %s."
-
-#, fuzzy
+msgstr "לא ניתן להוסיף את החבר %s לקבוצה %s ברשימה בשרת בחשבון %s."
+
 msgid "Unable to add buddy to server list"
-msgstr "לא ניתן להוסיף את איש הקשר לרשימה בשרת"
+msgstr "לא ניתן להוסיף את החבר לרשימה בשרת"
 
 #, c-format
 msgid "[ Audible %s/%s/%s.swf ] %s"
 msgstr "[ בר-שמיעה %s/%s/%s.swf ] %s"
 
-#, fuzzy
 msgid "Received unexpected HTTP response from server"
-msgstr "התקבלה תגובת HTTP לא-צפויה מן השרת."
-
-#, fuzzy, c-format
+msgstr "התקבלה תגובת HTTP לא-צפויה מן השרת"
+
+#, c-format
 msgid "Lost connection with %s: %s"
-msgstr ""
-"אבד החיבור עם %s:\n"
-"%s"
-
-#, fuzzy, c-format
+msgstr "אבד החיבור עם %s: %s"
+
+#, c-format
 msgid "Unable to establish a connection with %s: %s"
-msgstr ""
-"לא ניתן ליצור חיבור עם השרת:\n"
-"%s"
+msgstr "לא ניתן ליצור חיבור עם %s: %s"
 
 msgid "Not at Home"
 msgstr "לא נמצא בבית"
@@ -9509,7 +9354,7 @@
 msgstr "התחל לקשקש"
 
 msgid "Select the ID you want to activate"
-msgstr ""
+msgstr "יש לבחור את המזהה ברצונך להפעיל"
 
 msgid "Join whom in chat?"
 msgstr "להצטרף למי בצ'אט?"
@@ -9582,10 +9427,9 @@
 msgid "Last Update"
 msgstr "עודכן לאחרונה"
 
-#, fuzzy
 msgid ""
 "This profile is in a language or format that is not supported at this time."
-msgstr "סליחה, אך נראה כי פרופיל זה הוא בשפה או פורמט שלא נתמכים כרגע."
+msgstr "פרופיל זה אינו בשפה או פורמט אשר אינם נתמכים כרגע."
 
 msgid ""
 "Could not retrieve the user's profile. This most likely is a temporary "
@@ -9606,12 +9450,9 @@
 msgid "The user's profile is empty."
 msgstr "פרופיל המשתמש ריק."
 
-#, c-format
-msgid "%s declined your conference invitation to room \"%s\" because \"%s\"."
-msgstr "%s סרב את ההזמנה שלך לועידה בחדר \"%s\" כיוון ש-\"%s\"."
-
-msgid "Invitation Rejected"
-msgstr "ההזמנה נדחתה"
+#, fuzzy, c-format
+msgid "%s has declined to join."
+msgstr "%s התחבר."
 
 msgid "Failed to join chat"
 msgstr "לא ניתן להצטרף לשיחה"
@@ -9663,9 +9504,8 @@
 msgid "User Rooms"
 msgstr "חדרים של משתמשים"
 
-#, fuzzy
 msgid "Connection problem with the YCHT server"
-msgstr "שגיאה בתקשורת עם שרת ה-YCHT."
+msgstr "שגיאה עם החיבור אל שרת ה-YCHT."
 
 msgid ""
 "(There was an error converting this message.\t Check the 'Encoding' option "
@@ -9787,17 +9627,17 @@
 msgid "Exposure"
 msgstr "חשיפה"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to parse response from HTTP proxy: %s"
-msgstr "לא ניתן לעכל את תשובת שרת התיווך של HTTP: %s\n"
+msgstr "לא ניתן לעבד את משוב שרת התיווך של HTTP: %s"
 
 #, c-format
 msgid "HTTP proxy connection error %d"
 msgstr "שגיאה בשרת התיווך של HTTP %d"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Access denied: HTTP proxy server forbids port %d tunneling"
-msgstr "אין הרשאה: שרת התיווך אוסר על תיעול ליציאה %d."
+msgstr "אין הרשאה: שרת התיווך אוסר על תיעול ליציאה %d"
 
 #, c-format
 msgid "Error resolving %s"
@@ -9980,9 +9820,9 @@
 msgid "Unable to connect to %s"
 msgstr "לא ניתן להתחבר אל %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Error reading from %s: response too long (%d bytes limit)"
-msgstr "שגיאה בקריאה מתוך %s: %s"
+msgstr "שגיאה בקריאה מתוך %s: אורך המשוב ארוך מדי (מוגבל עד %d בייט)"
 
 #, c-format
 msgid ""
@@ -10041,12 +9881,12 @@
 msgid "Error Reading %s"
 msgstr "שגיאה בקריאת %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "An error was encountered reading your %s.  The file has not been loaded, and "
 "the old file has been renamed to %s~."
 msgstr ""
-"חלה שגיאה בעת קריאת ה-%s שלך.  הם לא נטענו, ושם הקובץ הישן הוחלף ל-%s~."
+"חלה שגיאה בעת קריאת ה-%s שלך. הקובץ לא נטען, ושם ההובץ הישן שונה ל-%s~."
 
 msgid "Internet Messenger"
 msgstr "למסרים באינטרנט"
@@ -10090,7 +9930,7 @@
 msgid "Use this buddy _icon for this account:"
 msgstr "השתמש בתמונה זו לחשבון זה:"
 
-msgid "_Advanced"
+msgid "Ad_vanced"
 msgstr "_מתקדם"
 
 msgid "Use GNOME Proxy Settings"
@@ -10153,9 +9993,8 @@
 msgid "Create _this new account on the server"
 msgstr "צור חשבון חדש זה על השרת"
 
-#, fuzzy
-msgid "_Proxy"
-msgstr "מתווך"
+msgid "P_roxy"
+msgstr "מת_ווך"
 
 msgid "Enabled"
 msgstr "פעיל"
@@ -10163,7 +10002,7 @@
 msgid "Protocol"
 msgstr "פרוטוקול"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "<span size='larger' weight='bold'>Welcome to %s!</span>\n"
 "\n"
@@ -10175,14 +10014,14 @@
 "You can come back to this window to add, edit, or remove accounts from "
 "<b>Accounts->Manage Accounts</b> in the Buddy List window"
 msgstr ""
-"<span size='larger' weight='bold'>ברוכים הבאים ל-%s!</span>\n"
-"\n"
-"אין ברשותך שם חשבונות מוגדרים. להתחיל התחברות עם %s יש ללחוץ על הכפתור "
-"<b>הוסף</b> שלמטה ולהגדיר את החשבון הראשון שלך. אם ברצונך ש-%s יתחבר לכמה "
-"חשבונות, יש ללחוץ על <b>הוסף</b> שוב על-מנת להגדיר את כולם.\n"
+"<span size='larger' weight='bold'>ברוכים הבאים אל%s!</span>\n"
+"\n"
+"אין ברשותך שם חשבונות מוגדרים. על מנת להתחבר עם %s יש ללחוץ על הכפתור "
+"<b>הוסף...</b> שלהלן להגדיר את חשבונך הראשון. אם ברצונך ש-%s יתחבר לכמה "
+"חשבונות, יש ללחוץ על <b>הוסף...</b> שוב על מנת להגדיר את כולם.\n"
 "\n"
 "ניתן גם לחזור לחלון זה על מנת להוסיף, לערוך, או להסיר חשבונות על-ידי "
-"<b>חשבונות->הוסף/ערוך</b> שבחלון רשימת אנשי-הקשר"
+"<b>חשבונות->נהל חשבונות</b> שבחלון רשימת החברים"
 
 #, c-format
 msgid "You have %d contact named %s. Would you like to merge them?"
@@ -10203,9 +10042,8 @@
 msgid "Please update the necessary fields."
 msgstr "יש לעדכן את השדות הנחוצים."
 
-#, fuzzy
 msgid "A_ccount"
-msgstr "חשבון"
+msgstr "ח_שבון"
 
 msgid ""
 "Please enter the appropriate information about the chat you would like to "
@@ -10230,16 +10068,14 @@
 msgid "I_M"
 msgstr "הודעה"
 
-#, fuzzy
 msgid "_Audio Call"
-msgstr "הוסף שיחה"
+msgstr "שיחה _קולית"
 
 msgid "Audio/_Video Call"
-msgstr ""
-
-#, fuzzy
+msgstr "שיחה קולית או שיחת וידאו"
+
 msgid "_Video Call"
-msgstr "שיחת וידאו"
+msgstr "שיחת וי_דאו"
 
 msgid "_Send File..."
 msgstr "שלח קובץ..."
@@ -10250,11 +10086,9 @@
 msgid "View _Log"
 msgstr "הצ_ג רישום"
 
-#, fuzzy
 msgid "Hide When Offline"
 msgstr "החבא כאשר לא-מקוון"
 
-#, fuzzy
 msgid "Show When Offline"
 msgstr "הצג כאשר לא-מקוון"
 
@@ -10380,9 +10214,8 @@
 msgid "/Tools/_Certificates"
 msgstr "/כלים/תעודות"
 
-#, fuzzy
 msgid "/Tools/Custom Smile_ys"
-msgstr "/כלים/_חייכן"
+msgstr "/כלים/_חייכן שלי"
 
 msgid "/Tools/Plu_gins"
 msgstr "/כלים/תו_ספים"
@@ -10511,7 +10344,7 @@
 msgstr "לפי מצב"
 
 msgid "By recent log activity"
-msgstr ""
+msgstr "על פי פעילות אחרונה ביומן הרישום"
 
 #, c-format
 msgid "%s disconnected"
@@ -10528,7 +10361,7 @@
 msgstr "הפעל מחדש"
 
 msgid "SSL FAQs"
-msgstr ""
+msgstr "שו\"ת SSL"
 
 msgid "Welcome back!"
 msgstr "ברוך שובך!"
@@ -10620,9 +10453,8 @@
 msgid "Auto_join when account becomes online."
 msgstr "הצטרפות אוטומטית כאשר החשבון נעשה מקוון."
 
-#, fuzzy
 msgid "_Remain in chat after window is closed."
-msgstr "ה_סתר צ'אט כאשר החלון נסגר."
+msgstr "הש_אר בצ'אט אחרי שהחלון נסגר."
 
 msgid "Please enter the name of the group to be added."
 msgstr "יש להזין את שם הקבוצה החדשה."
@@ -10655,111 +10487,96 @@
 msgid "Background Color"
 msgstr "צבע הרקע"
 
-#, fuzzy
 msgid "The background color for the buddy list"
-msgstr "קבוצה זו נוספה לרשימת אנשי הקשר שלך"
-
-#, fuzzy
+msgstr "צבע הרקע עבור רשימת החברים"
+
 msgid "Layout"
-msgstr "לאית"
+msgstr "מתווה"
 
 msgid "The layout of icons, name, and status of the blist"
-msgstr ""
+msgstr "מיקומי הסמלים, השמות והמצבים ברשימת אנשי-הקשר"
 
 #. Group
-#, fuzzy
 msgid "Expanded Background Color"
-msgstr "צבע הרקע"
+msgstr "צבע רקע עבור מורחב"
 
 msgid "The background color of an expanded group"
-msgstr ""
-
-#, fuzzy
+msgstr "צבע-הרקע של קבוצה שהורחבה"
+
 msgid "Expanded Text"
-msgstr "ה_רחב"
+msgstr "טקסט מורחב"
 
 msgid "The text information for when a group is expanded"
-msgstr ""
-
-#, fuzzy
+msgstr "טקסט למידע כשקבוצה מורחבת"
+
 msgid "Collapsed Background Color"
-msgstr "בחירת צבע רקע"
+msgstr "צבע רקע עבור עבור מקופל"
 
 msgid "The background color of a collapsed group"
-msgstr ""
-
-#, fuzzy
+msgstr "צבע-הרקע של קבוצה שצומצמה"
+
 msgid "Collapsed Text"
-msgstr "_קפל"
+msgstr "טקסט מקופל"
 
 msgid "The text information for when a group is collapsed"
-msgstr ""
+msgstr "טקסט למידע כשקבוצה מצומצמת"
 
 #. Buddy
-#, fuzzy
 msgid "Contact/Chat Background Color"
-msgstr "בחירת צבע רקע"
+msgstr "צבע רקע עבור צ'אט/איש-קשר"
 
 msgid "The background color of a contact or chat"
-msgstr ""
-
-#, fuzzy
+msgstr "צבע-הרקע של איש-קשר או צ'אט"
+
 msgid "Contact Text"
-msgstr "קיצור-דרך"
+msgstr "טקסט איש-קשר"
 
 msgid "The text information for when a contact is expanded"
-msgstr ""
-
-#, fuzzy
+msgstr "טקסט למידע כשאיש-קשר מורחב"
+
 msgid "On-line Text"
-msgstr "מחובר"
+msgstr "טקסט כשמחובר"
 
 msgid "The text information for when a buddy is online"
-msgstr ""
-
-#, fuzzy
+msgstr "טקסט למידע כשאיש-קשר מחובר"
+
 msgid "Away Text"
-msgstr "רחוק מהמחשב"
+msgstr "טקסט כשרחוק מהמחשב"
 
 msgid "The text information for when a buddy is away"
-msgstr ""
-
-#, fuzzy
+msgstr "טקסט למידע כשאיש-קשר מרוחק מהמחשב"
+
 msgid "Off-line Text"
-msgstr "מנותק"
+msgstr "טקסט כשמנותק"
 
 msgid "The text information for when a buddy is off-line"
-msgstr ""
-
-#, fuzzy
+msgstr "טקסט למידע כשאיש-קשר מנותק"
+
 msgid "Idle Text"
-msgstr "טקסט מצב-רוח"
+msgstr "טקסט כשחסר-פעילות"
 
 msgid "The text information for when a buddy is idle"
-msgstr ""
-
-#, fuzzy
+msgstr "טקסט למידע כשאיש-קשר חסר-פעילות"
+
 msgid "Message Text"
-msgstr "הודעה נשלחה"
+msgstr "טקסט הודעת"
 
 msgid "The text information for when a buddy has an unread message"
-msgstr ""
+msgstr "טקסט למידע כשלאיש-קשר יש הודעות שלא נקראו"
 
 msgid "Message (Nick Said) Text"
-msgstr ""
+msgstr "טקסט הודעות (מישהו אמר)"
 
 msgid ""
 "The text information for when a chat has an unread message that mentions "
 "your nick"
-msgstr ""
-
-#, fuzzy
+msgstr "טקסט להציג כשצ'אט מכיל הודעה שלא-נקראה שמזכירה את הכינוי שלך"
+
 msgid "The text information for a buddy's status"
-msgstr "שנה פרטי משתמש עבור %s"
-
-#, fuzzy
+msgstr "הטקסט עבור מצבו של חבר"
+
 msgid "Type the host name for this certificate."
-msgstr "יש להקליד את שם השרת שעבורו נועדה התעודה"
+msgstr "יש להקליד את שם השרת שעבורו נועדה תעודה זו"
 
 #. Widget creation function
 msgid "SSL Servers"
@@ -10806,7 +10623,6 @@
 msgid "Get Away Message"
 msgstr "השג את הודעת ההתרחקות"
 
-#, fuzzy
 msgid "Last Said"
 msgstr "נאמר לאחרונה"
 
@@ -10853,21 +10669,17 @@
 msgid "/Conversation/Clea_r Scrollback"
 msgstr "/שיחה/נ_קה גלילה לאחור"
 
-#, fuzzy
 msgid "/Conversation/M_edia"
-msgstr "/שיחה/_עוד"
-
-#, fuzzy
+msgstr "/שיחה/_מדיה"
+
 msgid "/Conversation/Media/_Audio Call"
-msgstr "/שיחה/_עוד"
-
-#, fuzzy
+msgstr "/שיחה _קולית/שיחה/מדיה"
+
 msgid "/Conversation/Media/_Video Call"
-msgstr "/שיחה/_עוד"
-
-#, fuzzy
+msgstr "/שיחת _וידאו/שיחה/מדיה"
+
 msgid "/Conversation/Media/Audio\\/Video _Call"
-msgstr "/שיחה/ה_צג יומן שיחות"
+msgstr "/שיחת ו_ידאו/\\קול/שיחה/מדיה"
 
 msgid "/Conversation/Se_nd File..."
 msgstr "/שיחה/ש_לח קובץ..."
@@ -10941,17 +10753,14 @@
 msgid "/Conversation/View Log"
 msgstr "/שיחה/הצג יומן שיחות"
 
-#, fuzzy
 msgid "/Conversation/Media/Audio Call"
-msgstr "/שיחה/עוד"
-
-#, fuzzy
+msgstr "/שיחת קול/שיחה/מדיה"
+
 msgid "/Conversation/Media/Video Call"
-msgstr "/שיחה/הצג יומן שיחות"
-
-#, fuzzy
+msgstr "/שיחת וידאו/שיחה/מדיה"
+
 msgid "/Conversation/Media/Audio\\/Video Call"
-msgstr "/שיחה/עוד"
+msgstr "/שיחת וידאו/\\קול/שיחה/מדיה"
 
 msgid "/Conversation/Send File..."
 msgstr "/שיחה/שלח קובץ..."
@@ -11126,9 +10935,8 @@
 msgstr "שגיאה קטלנית"
 
 msgid "bug master"
-msgstr ""
-
-#, fuzzy
+msgstr "שר-הבאגים"
+
 msgid "artist"
 msgstr "אמן"
 
@@ -11137,14 +10945,13 @@
 msgstr "קא-הינג צ'אונג"
 
 msgid "voice and video"
-msgstr ""
+msgstr "קול ווידאו"
 
 msgid "support"
 msgstr "תמיכה"
 
-#, fuzzy
 msgid "webmaster"
-msgstr "מפתח ומנהל אתר"
+msgstr "מנהל אתר"
 
 msgid "Senior Contributor/QA"
 msgstr "תורם בכיר/QA"
@@ -11166,7 +10973,7 @@
 msgstr "תמיכה/QA"
 
 msgid "XMPP"
-msgstr ""
+msgstr "XMPP"
 
 msgid "original author"
 msgstr "מתכנת מקורי"
@@ -11243,9 +11050,8 @@
 msgid "French"
 msgstr "צרפתית"
 
-#, fuzzy
 msgid "Irish"
-msgstr "כורדית"
+msgstr "אירית"
 
 msgid "Galician"
 msgstr "גליסיאנית"
@@ -11265,9 +11071,8 @@
 msgid "Hungarian"
 msgstr "הונגרית"
 
-#, fuzzy
 msgid "Armenian"
-msgstr "רומנית"
+msgstr "ארמנית"
 
 msgid "Indonesian"
 msgstr "אינדונזית"
@@ -11284,9 +11089,8 @@
 msgid "Ubuntu Georgian Translators"
 msgstr "מתרגמי הגרוזינית של אובונטו"
 
-#, fuzzy
 msgid "Khmer"
-msgstr "אחר"
+msgstr "קמבודית"
 
 msgid "Kannada"
 msgstr "קאנאדית"
@@ -11309,9 +11113,8 @@
 msgid "Macedonian"
 msgstr "מקדונית"
 
-#, fuzzy
 msgid "Mongolian"
-msgstr "מקדונית"
+msgstr "מונגולית"
 
 msgid "Bokmål Norwegian"
 msgstr "נורבגית ספרותית"
@@ -11368,7 +11171,7 @@
 msgstr "שוודית"
 
 msgid "Swahili"
-msgstr ""
+msgstr "סוואהילי"
 
 msgid "Tamil"
 msgstr "תמיל"
@@ -11433,21 +11236,25 @@
 "<FONT SIZE=\"4\">FAQ:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ"
 "\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>"
 msgstr ""
+"<FONT SIZE=\"4\">שו\"ת:</FONT> <A HREF=\"http://developer.pidgin.im/wiki/FAQ"
+"\">http://developer.pidgin.im/wiki/FAQ</A><BR/><BR/>"
 
 #, c-format
 msgid ""
 "<FONT SIZE=\"4\">Help via e-mail:</FONT> <A HREF=\"mailto:support@pidgin.im"
 "\">support@pidgin.im</A><BR/><BR/>"
 msgstr ""
-
-#, fuzzy, c-format
+"<FONT SIZE=\"4\">עזרה דרך האימייל:</FONT> <A HREF=\"mailto:support@pidgin.im"
+"\">support@pidgin.im</A><BR/><BR/>"
+
+#, c-format
 msgid ""
 "<FONT SIZE=\"4\">IRC Channel:</FONT> #pidgin on irc.freenode.net<BR><BR>"
-msgstr "<FONT SIZE=\"4\">IRC:</FONT> #pidgin ב- irc.freenode.net<BR><BR>"
-
-#, fuzzy, c-format
+msgstr "<FONT SIZE=\"4\">ערוץ IRC:</FONT> #pidgin על irc.freenode.net<BR><BR>"
+
+#, c-format
 msgid "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>"
-msgstr "<FONT SIZE=\"4\">IRC:</FONT> #pidgin ב- irc.freenode.net<BR><BR>"
+msgstr "<FONT SIZE=\"4\">XMPP MUC:</FONT> devel@conference.pidgin.im<BR><BR>"
 
 msgid "Current Developers"
 msgstr "מפתחים"
@@ -11687,13 +11494,11 @@
 msgid "Color to draw hyperlinks."
 msgstr "צבע לצבוע בו קישורים."
 
-#, fuzzy
 msgid "Hyperlink visited color"
-msgstr "צבע קישורים"
-
-#, fuzzy
+msgstr "צבע קישור שביקרת"
+
 msgid "Color to draw hyperlink after it has been visited (or activated)."
-msgstr "הצבע לצבוע בו קישורים כאשר העכבר מעליהם."
+msgstr "הצבע עבור קישורים שכבר בוקרו (או הופעלו)."
 
 msgid "Hyperlink prelight color"
 msgstr "צבע קישורים לפני לחיצה"
@@ -11728,23 +11533,20 @@
 msgid "Action Message Name Color for Whispered Message"
 msgstr "צבע עבור שמות הודעות-פעולה להודעות שנלחשות"
 
-#, fuzzy
 msgid "Color to draw the name of a whispered action message."
-msgstr "הצבע עבור שם של הודעות-פעולה."
+msgstr "הצבע עבור השם של הודעת פעולה שנלחשה."
 
 msgid "Whisper Message Name Color"
 msgstr "צבע עבור שם הודעה שנלחשה"
 
-#, fuzzy
 msgid "Color to draw the name of a whispered message."
-msgstr "הצבע עבור שם של הודעות-פעולה."
+msgstr "הצבע עבור השם של הודעה שנלחשה."
 
 msgid "Typing notification color"
 msgstr "צבע התרעת-הקלדה"
 
-#, fuzzy
 msgid "The color to use for the typing notification"
-msgstr "הצבע בו תוצג התרעת ההקלדה"
+msgstr "הצבע עבור התרעת ההקלדה."
 
 msgid "Typing notification font"
 msgstr "גופן התרעת-הקלדה"
@@ -11988,7 +11790,7 @@
 msgid "%s %s. Try `%s -h' for more information.\n"
 msgstr "%s %s. יש לנסות את '%s –h' למידע נוסף.\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s %s\n"
 "Usage: %s [OPTION]...\n"
@@ -12010,6 +11812,7 @@
 "\n"
 "  -c, --config=ספריה  השתמש בספרייה לקבצי הגדרות\n"
 "  -d, --debug         שלח הודעות ניפוי באגים ל-stdout\n"
+"  -f, --force-online  אלץ מצב מקוון, בלי להתחשב במצב הרשת\n"
 "  -h, --help          הצג הודעה זו וצא\n"
 "  -m, --multiple      אל תוודא שרק עותק אחד רץ\n"
 "  -n, --nologin       אל תתחבר אוטומטית\n"
@@ -12018,7 +11821,7 @@
 "  --display=DISPLAY   מספר התצוגה להשתמש בו בחלונות X\n"
 "  -v, --version       הצג את הגירסאשל התוכנה וצא\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s %s\n"
 "Usage: %s [OPTION]...\n"
@@ -12039,6 +11842,7 @@
 "\n"
 "  -c, --config=ספריה  השתמש בספרייה לקבצי הגדרות\n"
 "  -d, --debug         שלח הודעות ניפוי באגים ל-stdout\n"
+"  -f, --force-online  אלץ מצב מקוון, בלי להתחשב במצב הרשת\n"
 "  -h, --help          הצג הודעה זו וצא\n"
 "  -m, --multiple      אל תוודא שרק עותק אחד רץ\n"
 "  -n, --nologin       אל תתחבר אוטומטית\n"
@@ -12047,7 +11851,7 @@
 "  --display=DISPLAY   מספר התצוגה להשתמש בו בחלונות X\n"
 "  -v, --version       הצג את הגרסה של התוכנה וצא\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s %s has segfaulted and attempted to dump a core file.\n"
 "This is a bug in the software and has happened through\n"
@@ -12065,17 +11869,14 @@
 "%s %s נפל וניסה לכתוב קובץ של הזיכרון לקובץ.\n"
 "זהו באג בתוכנה, שקרה ללא שום אשמה מצידך.\n"
 "\n"
-"אם באפשרותך לגרום לנפילה לקרות שוב, אנא הודע על כך למפתחים דרך:\n"
+"אם באפשרותך לגרום לנפילה לקרות שוב, אנא הודע על כך למפתחים\n"
+"על ידי דיווח באג באתר:\n"
 "%ssimpleticket/\n"
 "\n"
 "יש לפרט בדיוק מה עשית בזמן הנפילה, ולשלוח את הודעות ה-backtrace מהקובץ "
 "core.\n"
 "אם אינך יודע/ת להוציא את ה-backtrace, אנא קרא את ההוראות ב:\n"
 "%swiki/GetABacktrace\n"
-"\n"
-"אם יש צורך בעזרה נוספת, אנא פנה בהודעה אל SeanEgn או LSchiere דרך AIM.\n"
-"מידע ליצור קשר עם שון ולוק בפרוטוקולים אחרים נמצא ב:\n"
-"%swiki/DeveloperPages\n"
 
 #. Translators may want to transliterate the name.
 #. It is not to be translated.
@@ -12084,25 +11885,24 @@
 
 #, c-format
 msgid "Exiting because another libpurple client is already running.\n"
-msgstr ""
+msgstr "מסיים מכיוון שכבר רצה תוכנה אחרת שהמשתמש בספריית libpurple.\n"
 
 msgid "/_Media"
-msgstr ""
+msgstr "/_מדיה"
 
 msgid "/Media/_Hangup"
-msgstr ""
-
-#, fuzzy
+msgstr "/מדיה/_ניתוק"
+
 msgid "Calling..."
-msgstr "מחשב..."
+msgstr "מתקשר..."
 
 #, c-format
 msgid "%s wishes to start an audio/video session with you."
-msgstr ""
+msgstr "נתקבלה בקשה מאת %s להתחיל התקשרות קול/וידאו איתך."
 
 #, c-format
 msgid "%s wishes to start a video session with you."
-msgstr ""
+msgstr "נתקבלה בקשה מאת %s להתחיל התקשרות וידאו איתך."
 
 #, c-format
 msgid "%s has %d new message."
@@ -12131,9 +11931,8 @@
 "The 'Manual' browser command has been chosen, but no command has been set."
 msgstr "נבחרה לביצוע הפקודה 'הידנית' של הדפדפן, אבל לא נקבעה הוראה לביצוע."
 
-#, fuzzy
 msgid "No message"
-msgstr "הודעת לא מוכרת"
+msgstr "ללא הודעה"
 
 msgid "Open All Messages"
 msgstr "פתח את כל ההודעות"
@@ -12141,16 +11940,14 @@
 msgid "<span weight=\"bold\" size=\"larger\">You have mail!</span>"
 msgstr "<span weight=\"bold\" size=\"larger\">דואר חדש נכנס!</span>"
 
-#, fuzzy
 msgid "New Pounces"
-msgstr "צור תגובת פעילות חדשה"
+msgstr "צור תגובות פעילות חדשות"
 
 msgid "Dismiss"
-msgstr ""
-
-#, fuzzy
+msgstr "סגור"
+
 msgid "<span weight=\"bold\" size=\"larger\">You have pounced!</span>"
-msgstr "<span weight=\"bold\" size=\"larger\">דואר חדש נכנס!</span>"
+msgstr "<span weight=\"bold\" size=\"larger\">הפעלת פעולת-תגובה!</span>"
 
 msgid "The following plugins will be unloaded."
 msgstr "התוספים שלהלן ייפרקו מן הזיכרון."
@@ -12198,7 +11995,6 @@
 msgid "Select a file"
 msgstr "בחר קובץ"
 
-#, fuzzy
 msgid "Modify Buddy Pounce"
 msgstr "ערוך שינויים בתגובת פעילות"
 
@@ -12275,61 +12071,58 @@
 msgid "Pounce Target"
 msgstr "מטרת התגובה"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Started typing"
-msgstr "מתחיל/ה להקליד"
-
-#, fuzzy, c-format
+msgstr "התחיל/ה להקליד"
+
+#, c-format
 msgid "Paused while typing"
-msgstr "עוצר בעת הקלדה"
-
-#, fuzzy, c-format
+msgstr "עצר/ה בעת הקלדה"
+
+#, c-format
 msgid "Signed on"
-msgstr "מתחבר"
-
-#, fuzzy, c-format
+msgstr "התחבר/ה"
+
+#, c-format
 msgid "Returned from being idle"
-msgstr "%s חזר לפעילות (%s)"
-
-#, fuzzy, c-format
+msgstr "חזר/ה מחוסר-פעילות"
+
+#, c-format
 msgid "Returned from being away"
-msgstr "חוזר/ת למחשב"
-
-#, fuzzy, c-format
+msgstr "חזר/ה למחשב"
+
+#, c-format
 msgid "Stopped typing"
-msgstr "הפסיק/ה להקליד"
-
-#, fuzzy, c-format
+msgstr "כבר לא מקליד/ה"
+
+#, c-format
 msgid "Signed off"
-msgstr "מתנתק"
-
-#, fuzzy, c-format
+msgstr "התנתק/ה"
+
+#, c-format
 msgid "Became idle"
-msgstr "חסר/ת פעילות"
-
-#, fuzzy, c-format
+msgstr "הפכ/ה לחסרת-פעילות"
+
+#, c-format
 msgid "Went away"
-msgstr "כאשר מרוחק"
-
-#, fuzzy, c-format
+msgstr "נעשה מרוחק"
+
+#, c-format
 msgid "Sent a message"
 msgstr "שלח הודעה"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unknown.... Please report this!"
-msgstr "אירעה פעילות לא מוכרת. אנא דווח על כך!"
-
-#, fuzzy
+msgstr "לא מוכר. אנא דווח על כך!"
+
 msgid "Theme failed to unpack."
-msgstr "כישלון בעת פתיחת ערכת סמייליים"
-
-#, fuzzy
+msgstr "כישלון בעת פתיחת ערכת מוטיב."
+
 msgid "Theme failed to load."
-msgstr "כישלון בעת פתיחת ערכת סמייליים"
-
-#, fuzzy
+msgstr "כישלון בעת טעינת ערכת מוטיב."
+
 msgid "Theme failed to copy."
-msgstr "כישלון בעת פתיחת ערכת סמייליים"
+msgstr "כישלון בעת העתקת ערכת מוטיב."
 
 msgid "Install Theme"
 msgstr "התקן עיצוב"
@@ -12351,9 +12144,8 @@
 msgstr "_סגור חלונות שיחה עם כפתור האסקייפ"
 
 #. Buddy List Themes
-#, fuzzy
 msgid "Buddy List Theme"
-msgstr "רשימת אנשי קשר"
+msgstr "מוטיבי תצוגה עבור רשימת החברים"
 
 #. System Tray
 msgid "System Tray Icon"
@@ -12365,9 +12157,8 @@
 msgid "On unread messages"
 msgstr "בהגעת הודעות שלא נקראו"
 
-#, fuzzy
 msgid "Conversation Window"
-msgstr "חלונות שיחה להודעות"
+msgstr "חלון שיחה"
 
 msgid "_Hide new IM conversations:"
 msgstr "ה_סתר שיחות חדשות"
@@ -12470,9 +12261,9 @@
 msgid "<span style=\"italic\">Example: stunserver.org</span>"
 msgstr "<span style=\"italic\">לדוגמא: stunserver.org</span>"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Use _automatically detected IP address: %s"
-msgstr "מצ_א כתובת IP אוטומטית"
+msgstr "התשמש ב_כתובת ה-IP שזוההתה אוטומטית: %s"
 
 msgid "Public _IP:"
 msgstr "כתובת IP חיצונית:"
@@ -12494,7 +12285,7 @@
 
 #. TURN server
 msgid "Relay Server (TURN)"
-msgstr ""
+msgstr "שרת העברה (TURN)"
 
 msgid "Proxy Server &amp; Browser"
 msgstr "שרת תיווך ודפדפן"
@@ -12526,7 +12317,7 @@
 
 #. This is a global option that affects SOCKS4 usage even with account-specific proxy settings
 msgid "Use remote DNS with SOCKS4 proxies"
-msgstr ""
+msgstr "השתמש בשירות DNS מרוחק עם שרתי-תיווך SOCKS"
 
 msgid "_User:"
 msgstr "_משתמש:"
@@ -12649,20 +12440,17 @@
 "צליל לפקו_דה:\n"
 "(%s עבור קובץ)"
 
-#, fuzzy
 msgid "M_ute sounds"
 msgstr "ה_שתק צלילים"
 
 msgid "Sounds when conversation has _focus"
 msgstr "צלילים כאשר יש לחלון השיחה מי_קוד"
 
-#, fuzzy
 msgid "_Enable sounds:"
-msgstr "הפעל צלילים:"
-
-#, fuzzy
+msgstr "ה_פעל צלילים"
+
 msgid "V_olume:"
-msgstr "עוצמת-שמע:"
+msgstr "עו_צמת-שמע"
 
 msgid "Play"
 msgstr "נגן"
@@ -12842,10 +12630,10 @@
 msgid "Status for %s"
 msgstr "מצב עבור %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "A custom smiley for '%s' already exists.  Please use a different shortcut."
-msgstr "חייכן שלך כבר קיים לקיצור-הדרך שנבחר. יש לבחור קיצור-דרך אחר."
+msgstr "כבר קיים חייכן משלך עבור '%s'. יש לנסות קיצור-דרך אחר."
 
 msgid "Custom Smiley"
 msgstr "חייכן שלך"
@@ -12859,36 +12647,30 @@
 msgid "Add Smiley"
 msgstr "הוס_ף חייכן"
 
-#, fuzzy
 msgid "_Image:"
-msgstr "תמונה"
+msgstr "ת_מונה"
 
 #. Shortcut text
-#, fuzzy
 msgid "S_hortcut text:"
-msgstr "קיצור-דרך"
+msgstr "טקסט לק_יצור-דרך:"
 
 msgid "Smiley"
 msgstr "חייכן"
 
-#, fuzzy
 msgid "Shortcut Text"
-msgstr "קיצור-דרך"
+msgstr "טקסט לקיצור-דרך"
 
 msgid "Custom Smiley Manager"
 msgstr "מנהל החייכנים שלך"
 
-#, fuzzy
 msgid "Select Buddy Icon"
-msgstr "בחר איש קשר"
-
-#, fuzzy
+msgstr "בחירת תמונה עבור חבר"
+
 msgid "Click to change your buddyicon for this account."
-msgstr "השתמש בתמונה זו לחשבון זה:"
-
-#, fuzzy
+msgstr "ניתן ללחוץ על מנת להחליף את תמונת החבר של חשבון זה."
+
 msgid "Click to change your buddyicon for all accounts."
-msgstr "השתמש בתמונה זו לחשבון זה:"
+msgstr "ניתן ללחוץ על מנת להחליף את תמונת החבר של כל החשבונות."
 
 msgid "Waiting for network connection"
 msgstr "ממתין לחיבור לרשת"
@@ -12962,13 +12744,12 @@
 msgid "Cannot send launcher"
 msgstr "לא ניתן לשלוח את קובץ המפעיל"
 
-#, fuzzy
 msgid ""
 "You dragged a desktop launcher. Most likely you wanted to send the target of "
 "this launcher instead of this launcher itself."
 msgstr ""
-"גררת קובץ מפעיל של שולחן העבודה. קרוב לודאי שרצית לשלוח את מה שהמפעיל "
-"מצביעעליו, ולא את המפעיל עצמו."
+"גררת קובץ מפעיל של שולחן העבודה. קרוב לודאי שרצית לשלוח את מה שהמפעיל מצביע "
+"עליו, ולא את המפעיל עצמו."
 
 #, c-format
 msgid ""
@@ -12999,9 +12780,8 @@
 "Failed to load image '%s': reason not known, probably a corrupt image file"
 msgstr "כישלון בעת טעינת התמונה '%s': סיבה לא ידועה, כנראה קובץ תמונה פגום"
 
-#, fuzzy
 msgid "_Open Link"
-msgstr "_פתח את הקישור בדפדפן הבא:"
+msgstr "_פתח קישור"
 
 msgid "_Copy Link Location"
 msgstr "ה_עתק מיקום הקישור"
@@ -13009,9 +12789,21 @@
 msgid "_Copy Email Address"
 msgstr "העתק _כתובת הדוא\"ל"
 
+msgid "_Open File"
+msgstr "פתח קוב_ץ"
+
+msgid "Open _Containing Directory"
+msgstr "פתח ספרייה _מכילה"
+
 msgid "Save File"
 msgstr "שמור קובץ"
 
+msgid "_Play Sound"
+msgstr "_נגן צליל"
+
+msgid "_Save File"
+msgstr "_שמור קובץ"
+
 msgid "Select color"
 msgstr "בחר צבע"
 
@@ -13027,13 +12819,11 @@
 msgid "_Invite"
 msgstr "הזמן"
 
-#, fuzzy
 msgid "_Modify..."
-msgstr "_ערוך"
-
-#, fuzzy
+msgstr "_ערוך..."
+
 msgid "_Add..."
-msgstr "הוסף"
+msgstr "_הוסף..."
 
 msgid "_Open Mail"
 msgstr "_פתח דואר"
@@ -13056,12 +12846,11 @@
 msgid "none"
 msgstr "ללא"
 
-#, fuzzy
 msgid "Small"
-msgstr "דואר"
+msgstr "קטן"
 
 msgid "Smaller versions of the default smilies"
-msgstr ""
+msgstr "גירסאות מוקטנות של חייכני ברירת המחדל"
 
 msgid "Response Probability:"
 msgstr "התסברות תגובה:"
@@ -13102,77 +12891,64 @@
 msgid "Displays statistical information about your buddies' availability"
 msgstr "מציג מידע סטטיסטי על זמינות אנשי-הקשר שלך"
 
-#, fuzzy
 msgid "Server name request"
-msgstr "כתובת שרת"
-
-#, fuzzy
+msgstr "בקשת שם שרת"
+
 msgid "Enter an XMPP Server"
-msgstr "יש להזין שרת ועידה"
-
-#, fuzzy
+msgstr "יש להזין שרת XMPP"
+
 msgid "Select an XMPP server to query"
-msgstr "יש לבחור שרת ועידה לתישאול"
-
-#, fuzzy
+msgstr "יש לבחור שרת XMPP לתישאול"
+
 msgid "Find Services"
-msgstr "שירותים מקוונים"
-
-#, fuzzy
+msgstr "מצא שירות"
+
 msgid "Add to Buddy List"
-msgstr "שלח רשימת אנשי הקשר"
-
-#, fuzzy
+msgstr "הוסף לרשימת אנשי-הקשר"
+
 msgid "Gateway"
-msgstr "מתרחק/ת מהמחשב"
-
-#, fuzzy
+msgstr "שער"
+
 msgid "Directory"
-msgstr "ספריית יומן אירועים"
-
-#, fuzzy
+msgstr "ספרייה"
+
 msgid "PubSub Collection"
-msgstr "בחירת הצליל"
-
-#, fuzzy
+msgstr "אוסף PubSub"
+
 msgid "PubSub Leaf"
-msgstr "שירות PubSub"
-
-#, fuzzy
+msgstr "עלה PubSub"
+
 msgid ""
 "\n"
 "<b>Description:</b> "
-msgstr "תיאור"
+msgstr ""
+"\n"
+"<b>תיאור:</b> "
 
 #. Create the window.
-#, fuzzy
 msgid "Service Discovery"
-msgstr "מידע של שירות תגלית"
-
-#, fuzzy
+msgstr "גילוי שרותים"
+
 msgid "_Browse"
-msgstr "_דפדפן:"
-
-#, fuzzy
+msgstr "_עיין"
+
 msgid "Server does not exist"
-msgstr "המשתמש לא קיים"
-
-#, fuzzy
+msgstr "השרת אינו קיים"
+
 msgid "Server does not support service discovery"
-msgstr "השרת לא תומך באימות באף תצורה"
-
-#, fuzzy
+msgstr "השרת לא תומך בגילוי שירותים"
+
 msgid "XMPP Service Discovery"
-msgstr "מידע של שירות תגלית"
+msgstr "גילוי שירות XMPP"
 
 msgid "Allows browsing and registering services."
-msgstr ""
-
-#, fuzzy
+msgstr "מאפשר רישום ועיון ברשימת השירותים"
+
 msgid ""
 "This plugin is useful for registering with legacy transports or other XMPP "
 "services."
-msgstr "תוסף זה שימושי לניפוי באגים בשרתים ולקוחות של XMPP."
+msgstr ""
+"תוסף זה שימושי לטובת רישום עם פרוטוקולי תקשורת ישנים או שירותי XMPP אחרים."
 
 msgid "Buddy is idle"
 msgstr "איש הקשר במנוחה"
@@ -13553,12 +13329,12 @@
 msgstr "תוסף להודעות מוזיקה להלחנה משותפת."
 
 #. *  summary
-#, fuzzy
 msgid ""
 "The Music Messaging Plugin allows a number of users to simultaneously work "
 "on a piece of music by editing a common score in real-time."
 msgstr ""
-"התוסף להודעות מוזיקה מאפשר למספר משתמשים לעבוד יחד על הלחנת יצירה בזמן אמת."
+"התוסף להודעות מוזיקה מאפשר למספר משתמשים לעבוד יחד על יצירה מוזיקלית על ידי "
+"עריכה של לחן משותף בזמן אמת."
 
 #. ---------- "Notify For" ----------
 msgid "Notify For"
@@ -13589,9 +13365,8 @@
 msgid "Set window manager \"_URGENT\" hint"
 msgstr "קבע את רמז ה-\"URGENT\" של מנהל החלונות"
 
-#, fuzzy
 msgid "_Flash window"
-msgstr "חלונות _שיחה"
+msgstr "הבהב ח_לון"
 
 #. Raise window method button
 msgid "R_aise conversation window"
@@ -13671,14 +13446,12 @@
 msgid "Hyperlink Color"
 msgstr "צבע קישורים"
 
-#, fuzzy
 msgid "Visited Hyperlink Color"
-msgstr "צבע קישורים"
+msgstr "צבע קישורים שביקרת"
 
 msgid "Highlighted Message Name Color"
 msgstr "צבע לסימון שמות בהודעות"
 
-#, fuzzy
 msgid "Typing Notification Color"
 msgstr "צבע התרעת-הקלדה"
 
@@ -13711,23 +13484,20 @@
 msgid "GTK+ Text Shortcut Theme"
 msgstr "מוטיב קיצור הדרך הטקסטואלי של GTK+"
 
-#, fuzzy
 msgid "Disable Typing Notification Text"
-msgstr "הפעל התרעת הקלדה"
-
-#, fuzzy
+msgstr "כבה טקסט התרעת הקלדה"
+
 msgid "GTK+ Theme Control Settings"
-msgstr "בקרת מוטיבים של GTK+ בפידג'ין"
-
-#, fuzzy
+msgstr "בקרת מוטיבים של GTK+"
+
 msgid "Colors"
-msgstr "סגור"
+msgstr "צבעים"
 
 msgid "Fonts"
 msgstr "גופנים"
 
 msgid "Miscellaneous"
-msgstr ""
+msgstr "שונות"
 
 msgid "Gtkrc File Tools"
 msgstr "כלים לקובץ Gtkrc"
@@ -13760,18 +13530,16 @@
 
 #, c-format
 msgid "You can upgrade to %s %s today."
-msgstr ""
+msgstr "ניתן לשדרג אל %s %s היום."
 
 msgid "New Version Available"
 msgstr "קיימת גירסה חדשה"
 
-#, fuzzy
 msgid "Later"
-msgstr "תאריך"
-
-#, fuzzy
+msgstr "מאוחר יותר"
+
 msgid "Download Now"
-msgstr "הורדת %s: %s"
+msgstr "הורד כעת"
 
 #. *< type
 #. *< ui_requirement
@@ -13812,12 +13580,11 @@
 msgstr "כפתור שליחה בחלון שיחה."
 
 #. *< summary
-#, fuzzy
 msgid ""
 "Adds a Send button to the entry area of the conversation window. Intended "
 "for use when no physical keyboard is present."
 msgstr ""
-"מוסיף כפתור שליחה לאיזור הקלט של חלון השיחה. נועד לשימוש כאשר אין מקלדת "
+"מוסיף כפתור שליחה לאיזור הקלט של חלון השיחה. נועד לתרחיש שאין בנמצא מקלדת "
 "פיזית."
 
 msgid "Duplicate Correction"
@@ -13869,94 +13636,78 @@
 msgid "Replaces text in outgoing messages according to user-defined rules."
 msgstr "מחליף טקסט בהודעות יוצאות עפ\"י חוקים שנקבעים ע\"י המשתמש."
 
-#, fuzzy
 msgid "Just logged in"
-msgstr "לא מחובר"
-
-#, fuzzy
+msgstr "רק התחבר"
+
 msgid "Just logged out"
-msgstr "לא מחובר"
+msgstr "רק התנתק"
 
 msgid ""
 "Icon for Contact/\n"
 "Icon for Unknown person"
 msgstr ""
-
-#, fuzzy
+"סמל עבור איש-קשר\n"
+"סמל עבור אדם לא מוכר"
+
 msgid "Icon for Chat"
-msgstr "הצטרף לשיחה"
-
-#, fuzzy
+msgstr "סמל לשיחה"
+
 msgid "Ignored"
 msgstr "התעלם"
 
-#, fuzzy
 msgid "Founder"
-msgstr "יותר רועש"
-
-#, fuzzy
+msgstr "מייסד"
+
 msgid "Operator"
-msgstr "אופרה"
+msgstr "מפעיל"
 
 msgid "Half Operator"
-msgstr ""
-
-#, fuzzy
+msgstr "חצי-מפעיל"
+
 msgid "Authorization dialog"
-msgstr "ההרשאה ניתנה"
-
-#, fuzzy
+msgstr "חלון הרשאה"
+
 msgid "Error dialog"
-msgstr "שגיאה "
-
-#, fuzzy
+msgstr "חלון שגיאה "
+
 msgid "Information dialog"
-msgstr "מידע"
+msgstr "חלון מידע"
 
 msgid "Mail dialog"
-msgstr ""
-
-#, fuzzy
+msgstr "חלון דואר"
+
 msgid "Question dialog"
-msgstr "חלון בקשה"
-
-#, fuzzy
+msgstr "חלון שאלה"
+
 msgid "Warning dialog"
-msgstr "רמת אזהרה"
+msgstr "חלון אזהרה"
 
 msgid "What kind of dialog is this?"
-msgstr ""
-
-#, fuzzy
+msgstr "איזה סוג חלון זה?"
+
 msgid "Status Icons"
-msgstr "מצב עבור %s"
-
-#, fuzzy
+msgstr "סמלי מצב"
+
 msgid "Chatroom Emblems"
-msgstr "הגדרה איזורית לחדר צ'אט"
-
-#, fuzzy
+msgstr "תגיות חדרי-צ'אט"
+
 msgid "Dialog Icons"
-msgstr "שמירת סמל"
-
-#, fuzzy
+msgstr "סמלי חלונות דו-שיח"
+
 msgid "Pidgin Icon Theme Editor"
-msgstr "בקרת מוטיבים של GTK+ בפידג'ין"
-
-#, fuzzy
+msgstr "עורך מוטיבים של סמלים בפידג'ין"
+
 msgid "Contact"
-msgstr "מידע על איש הקשר"
-
-#, fuzzy
+msgstr "איש הקשר"
+
 msgid "Pidgin Buddylist Theme Editor"
-msgstr "רשימת אנשי קשר"
-
-#, fuzzy
+msgstr "עורך המוטיבים של רשימת החברים בפידג'ין"
+
 msgid "Edit Buddylist Theme"
-msgstr "רשימת אנשי קשר"
+msgstr "ערוך מוטיבים של רשימת החברים"
 
 msgid "Edit Icon Theme"
-msgstr ""
+msgstr "ערוך מוטיב-סמלים"
 
 #. *< type
 #. *< ui_requirement
@@ -13965,16 +13716,14 @@
 #. *< priority
 #. *< id
 #. *  description
-#, fuzzy
 msgid "Pidgin Theme Editor"
-msgstr "בקרת מוטיבים של GTK+ בפידג'ין"
+msgstr "עורך מוטיבים בפידג'ין"
 
 #. *< name
 #. *< version
 #. *  summary
-#, fuzzy
 msgid "Pidgin Theme Editor."
-msgstr "בקרת מוטיבים של GTK+ בפידג'ין"
+msgstr "עורך מוטיבים בפידג'ין."
 
 #. *< type
 #. *< ui_requirement
@@ -14140,7 +13889,6 @@
 msgid "Options specific to Pidgin for Windows."
 msgstr "אפשרויות לפידג'ין היחודיות לחלונות."
 
-#, fuzzy
 msgid ""
 "Provides options specific to Pidgin for Windows, such as buddy list docking."
 msgstr ""
@@ -14184,6 +13932,23 @@
 msgid "This plugin is useful for debbuging XMPP servers or clients."
 msgstr "תוסף זה שימושי לניפוי באגים בשרתים ולקוחות של XMPP."
 
+#~ msgid "Malformed BOSH Connect Server"
+#~ msgstr "שרת חיבור BOSH משובש"
+
+#~ msgid "Unable to not load SILC key pair"
+#~ msgstr "לא ניתן שלא לטעון את זוג מפתחות ה-SILC"
+
+#~ msgid ""
+#~ "%s declined your conference invitation to room \"%s\" because \"%s\"."
+#~ msgstr "%s סרב את ההזמנה שלך לועידה בחדר \"%s\" כיוון ש-\"%s\"."
+
+#~ msgid "Invitation Rejected"
+#~ msgstr "ההזמנה נדחתה"
+
+#, fuzzy
+#~ msgid "_Proxy"
+#~ msgstr "מתווך"
+
 #~ msgid "Cannot open socket"
 #~ msgstr "אין אפשרות לפתוח שקע"