diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c
index 445f621..106866a 100644
--- a/coregrind/m_debuginfo/debuginfo.c
+++ b/coregrind/m_debuginfo/debuginfo.c
@@ -2563,14 +2563,14 @@
 /*--------------------------------------------------------------*/
 
 /* Try to make p2XA(dst, fmt, args..) turn into
-   VG_(xaprintf_no_f_c)(dst, fmt, args) without having to resort to
+   VG_(xaprintf)(dst, fmt, args) without having to resort to
    vararg macros.  As usual with everything to do with varargs, it's
    an ugly hack.
 
    //#define p2XA(dstxa, format, args...)
-   //   VG_(xaprintf_no_f_c)(dstxa, format, ##args)
+   //   VG_(xaprintf)(dstxa, format, ##args)
 */
-#define  p2XA  VG_(xaprintf_no_f_c)
+#define  p2XA  VG_(xaprintf)
 
 /* Add a zero-terminating byte to DST, which must be an XArray* of
    HChar. */
@@ -2712,7 +2712,7 @@
       if (xml) {
          TAGL( dn1 );
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside local var \"%t\",",
+               "Location 0x%lx is %lu byte%s inside local var \"%pS\",",
                data_addr, var_offset, vo_plural, var->name );
          TAGR( dn1 );
          TAGL( dn2 );
@@ -2736,18 +2736,18 @@
       if (xml) {
          TAGL( dn1 );
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside local var \"%t\"",
+               "Location 0x%lx is %lu byte%s inside local var \"%pS\"",
                data_addr, var_offset, vo_plural, var->name );
          TAGR( dn1 );
          XAGL( dn2 );
          TXTL( dn2 );
          p2XA( dn2,
-               "declared at %t:%d, in frame #%d of thread %d",
+               "declared at %pS:%d, in frame #%d of thread %d",
                var->fileName, var->lineNo, frameNo, (Int)tid );
          TXTR( dn2 );
          // FIXME: also do <dir>
          p2XA( dn2,
-               " <file>%t</file> <line>%d</line> ", 
+               " <file>%pS</file> <line>%d</line> ", 
                var->fileName, var->lineNo );
          XAGR( dn2 );
       } else {
@@ -2768,7 +2768,7 @@
       if (xml) {
          TAGL( dn1 );
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside %t%t",
+               "Location 0x%lx is %lu byte%s inside %pS%pS",
                data_addr, residual_offset, ro_plural, var->name,
                (HChar*)(VG_(indexXA)(described,0)) );
          TAGR( dn1 );
@@ -2792,19 +2792,19 @@
       if (xml) {
          TAGL( dn1 );
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside %t%t,",
+               "Location 0x%lx is %lu byte%s inside %pS%pS,",
                data_addr, residual_offset, ro_plural, var->name,
                (HChar*)(VG_(indexXA)(described,0)) );
          TAGR( dn1 );
          XAGL( dn2 );
          TXTL( dn2 );
          p2XA( dn2,
-               "declared at %t:%d, in frame #%d of thread %d",
+               "declared at %pS:%d, in frame #%d of thread %d",
                var->fileName, var->lineNo, frameNo, (Int)tid );
          TXTR( dn2 );
          // FIXME: also do <dir>
          p2XA( dn2,
-               " <file>%t</file> <line>%d</line> ",
+               " <file>%pS</file> <line>%d</line> ",
                var->fileName, var->lineNo );
          XAGR( dn2 );
       } else {
@@ -2826,7 +2826,7 @@
       if (xml) {
          TAGL( dn1 );
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside global var \"%t\"",
+               "Location 0x%lx is %lu byte%s inside global var \"%pS\"",
                data_addr, var_offset, vo_plural, var->name );
          TAGR( dn1 );
       } else {
@@ -2844,18 +2844,18 @@
       if (xml) {
          TAGL( dn1 );
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside global var \"%t\"",
+               "Location 0x%lx is %lu byte%s inside global var \"%pS\"",
                data_addr, var_offset, vo_plural, var->name );
          TAGR( dn1 );
          XAGL( dn2 );
          TXTL( dn2 );
          p2XA( dn2,
-               "declared at %t:%d",
+               "declared at %pS:%d",
                var->fileName, var->lineNo);
          TXTR( dn2 );
          // FIXME: also do <dir>
          p2XA( dn2,
-               " <file>%t</file> <line>%d</line> ",
+               " <file>%pS</file> <line>%d</line> ",
                var->fileName, var->lineNo );
          XAGR( dn2 );
       } else {
@@ -2876,7 +2876,7 @@
       if (xml) {
          TAGL( dn1 );
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside %t%t,",
+               "Location 0x%lx is %lu byte%s inside %pS%pS,",
                data_addr, residual_offset, ro_plural, var->name,
                (HChar*)(VG_(indexXA)(described,0)) );
          TAGR( dn1 );
@@ -2900,19 +2900,19 @@
       if (xml) {
          TAGL( dn1 );
          p2XA( dn1,
-               "Location 0x%lx is %lu byte%s inside %t%t,",
+               "Location 0x%lx is %lu byte%s inside %pS%pS,",
                data_addr, residual_offset, ro_plural, var->name,
                (HChar*)(VG_(indexXA)(described,0)) );
          TAGR( dn1 );
          XAGL( dn2 );
          TXTL( dn2 );
          p2XA( dn2,
-               "a global variable declared at %t:%d",
+               "a global variable declared at %pS:%d",
                var->fileName, var->lineNo);
          TXTR( dn2 );
          // FIXME: also do <dir>
          p2XA( dn2,
-               " <file>%t</file> <line>%d</line> ",
+               " <file>%pS</file> <line>%d</line> ",
                var->fileName, var->lineNo );
          XAGR( dn2 );
       } else {
diff --git a/coregrind/m_debuglog.c b/coregrind/m_debuglog.c
index ccd2ad9..7ad3f8c 100644
--- a/coregrind/m_debuglog.c
+++ b/coregrind/m_debuglog.c
@@ -721,12 +721,23 @@
                ret += myvprintf_int64(send, send_arg2, flags, 10, width, False,
                                       (ULong)(va_arg (vargs, UInt)));
             break;
-         case 'p': /* %p */
-            ret += 2;
-            send('0',send_arg2);
-            send('x',send_arg2);
-            ret += myvprintf_int64(send, send_arg2, flags, 16, width, True,
-                                   (ULong)((UWord)va_arg (vargs, void *)));
+         case 'p':
+            if (format[i+1] == 'S') {
+               i++;
+               /* %pS, like %s but escaping chars for XML safety */
+               /* Note: simplistic; ignores field width and flags */
+               char *str = va_arg (vargs, char *);
+               if (str == (char*) 0)
+                  str = "(null)";
+               ret += myvprintf_str_XML_simplistic(send, send_arg2, str);
+            } else {
+               /* %p */
+               ret += 2;
+               send('0',send_arg2);
+               send('x',send_arg2);
+               ret += myvprintf_int64(send, send_arg2, flags, 16, width, True,
+                                      (ULong)((UWord)va_arg (vargs, void *)));
+            }
             break;
          case 'x': /* %x */
          case 'X': /* %X */
@@ -754,13 +765,6 @@
                                  flags, width, str, format[i]=='S');
             break;
          }
-         case 't': { /* %t, like %s but escaping chars for XML safety */
-            /* Note: simplistic; ignores field width and flags */
-            char *str = va_arg (vargs, char *);
-            if (str == (char*) 0) str = "(null)";
-            ret += myvprintf_str_XML_simplistic(send, send_arg2, str);
-            break;
-         }
 
 //         case 'y': { /* %y - print symbol */
 //            Char buf[100];
diff --git a/coregrind/m_errormgr.c b/coregrind/m_errormgr.c
index 89e7d46..17be47a 100644
--- a/coregrind/m_errormgr.c
+++ b/coregrind/m_errormgr.c
@@ -309,12 +309,12 @@
 {
    static UChar buf[ERRTXT_LEN];
    if ( VG_(get_fnname_no_cxx_demangle) (ip, buf,  ERRTXT_LEN) ) {
-      VG_(printf_xml_no_f_c)("    <sframe> <fun>%t</fun> </sframe>\n", buf);
+      VG_(printf_xml)("    <sframe> <fun>%pS</fun> </sframe>\n", buf);
    } else
    if ( VG_(get_objname)(ip, buf, ERRTXT_LEN) ) {
-      VG_(printf_xml_no_f_c)("    <sframe> <obj>%t</obj> </sframe>\n", buf);
+      VG_(printf_xml)("    <sframe> <obj>%pS</obj> </sframe>\n", buf);
    } else {
-      VG_(printf_xml_no_f_c)("    <sframe> <obj>*</obj> </sframe>\n");
+      VG_(printf_xml)("    <sframe> <obj>*</obj> </sframe>\n");
    }
 }
 
@@ -405,10 +405,10 @@
          again. */
       VG_(printf_xml)("  <suppression>\n");
       VG_(printf_xml)("    <sname>%s</sname>\n", dummy_name);
-      VG_(printf_xml_no_f_c)(
-                      "    <skind>%t:%t</skind>\n", VG_(details).name, name);
+      VG_(printf_xml)(
+                      "    <skind>%pS:%pS</skind>\n", VG_(details).name, name);
       if (anyXtra)
-         VG_(printf_xml_no_f_c)("    <skaux>%t</skaux>\n", xtra);
+         VG_(printf_xml)("    <skaux>%pS</skaux>\n", xtra);
 
       // Print stack trace elements
       VG_(apply_StackTrace)(printSuppForIp_XML,
@@ -885,9 +885,9 @@
       if (su->count <= 0)
          continue;
       if (VG_(clo_xml)) {
-         VG_(printf_xml_no_f_c)( "  <pair>\n"
+         VG_(printf_xml)( "  <pair>\n"
                                  "    <count>%d</count>\n"
-                                 "    <name>%t</name>\n"
+                                 "    <name>%pS</name>\n"
                                  "  </pair>\n",
                                  su->count, su->sname );
       } else {
diff --git a/coregrind/m_libcprint.c b/coregrind/m_libcprint.c
index 75eff72..eba5099 100644
--- a/coregrind/m_libcprint.c
+++ b/coregrind/m_libcprint.c
@@ -166,17 +166,6 @@
    return ret;
 }
 
-/* An exact clone of VG_(printf_xml), unfortunately. */
-UInt VG_(printf_xml_no_f_c) ( const HChar *format, ... )
-{
-   UInt ret;
-   va_list vargs;
-   va_start(vargs, format);
-   ret = VG_(vprintf_xml)(format, vargs);
-   va_end(vargs);
-   return ret;
-}
-
 
 /* --------- sprintf --------- */
 
@@ -499,17 +488,6 @@
    return ret;
 }
 
-/* Send a simple single-part XML message. */
-UInt VG_(message_no_f_c) ( VgMsgKind kind, const HChar* format, ... )
-{
-   UInt count;
-   va_list vargs;
-   va_start(vargs,format);
-   count = VG_(vmessage) ( kind, format, vargs );
-   va_end(vargs);
-   return count;
-}
-
 /* Send a simple single-part message. */
 UInt VG_(message) ( VgMsgKind kind, const HChar* format, ... )
 {
diff --git a/coregrind/m_main.c b/coregrind/m_main.c
index ceb852e..a8edffb 100644
--- a/coregrind/m_main.c
+++ b/coregrind/m_main.c
@@ -1004,9 +1004,9 @@
                   i++;
                }
 
-               VG_(printf_xml_no_f_c)(
-                  "<logfilequalifier> <var>%t</var> "
-                  "<value>%t</value> </logfilequalifier>\n",
+               VG_(printf_xml)(
+                  "<logfilequalifier> <var>%pS</var> "
+                  "<value>%pS</value> </logfilequalifier>\n",
                   qualname,qual
                );
 	       format[i] = '}';
@@ -1073,7 +1073,7 @@
          VG_(printf_xml)("<preamble>\n");
 
       /* Tool details */
-      umsg_or_xml( VG_(clo_xml) ? "%s%t%t%t, %t%s\n" : "%s%s%s%s, %s%s\n",
+      umsg_or_xml( VG_(clo_xml) ? "%s%pS%pS%pS, %pS%s\n" : "%s%s%s%s, %s%s\n",
                    xpre,
                    VG_(details).name, 
                    NULL == VG_(details).version ? "" : "-",
@@ -1089,7 +1089,7 @@
          );
       }
 
-      umsg_or_xml( VG_(clo_xml) ? "%s%t%s\n" : "%s%s%s\n",
+      umsg_or_xml( VG_(clo_xml) ? "%s%pS%s\n" : "%s%s%s\n",
                    xpre, VG_(details).copyright_author, xpost );
 
       /* Core details */
@@ -1125,13 +1125,13 @@
       VG_(printf_xml)("\n");
       VG_(printf_xml)("<pid>%d</pid>\n", VG_(getpid)());
       VG_(printf_xml)("<ppid>%d</ppid>\n", VG_(getppid)());
-      VG_(printf_xml_no_f_c)("<tool>%t</tool>\n", toolname);
+      VG_(printf_xml)("<tool>%pS</tool>\n", toolname);
       if (xml_fname_unexpanded)
          print_file_vars(xml_fname_unexpanded);
       if (VG_(clo_xml_user_comment)) {
          /* Note: the user comment itself is XML and is therefore to
             be passed through verbatim (%s) rather than escaped
-            (%t). */
+            (%pS). */
          VG_(printf_xml)("<usercomment>%s</usercomment>\n",
                          VG_(clo_xml_user_comment));
       }
@@ -1140,14 +1140,14 @@
 
       VG_(printf_xml)("  <vargv>\n");
       if (VG_(name_of_launcher))
-         VG_(printf_xml_no_f_c)("    <exe>%t</exe>\n",
+         VG_(printf_xml)("    <exe>%pS</exe>\n",
                                 VG_(name_of_launcher));
       else
-         VG_(printf_xml_no_f_c)("    <exe>%t</exe>\n",
+         VG_(printf_xml)("    <exe>%pS</exe>\n",
                                 "(launcher name unknown)");
       for (i = 0; i < VG_(sizeXA)( VG_(args_for_valgrind) ); i++) {
-         VG_(printf_xml_no_f_c)(
-            "    <arg>%t</arg>\n",
+         VG_(printf_xml)(
+            "    <arg>%pS</arg>\n",
             * (HChar**) VG_(indexXA)( VG_(args_for_valgrind), i )
          );
       }
@@ -1155,11 +1155,11 @@
 
       VG_(printf_xml)("  <argv>\n");
       if (VG_(args_the_exename))
-         VG_(printf_xml_no_f_c)("    <exe>%t</exe>\n",
+         VG_(printf_xml)("    <exe>%pS</exe>\n",
                                 VG_(args_the_exename));
       for (i = 0; i < VG_(sizeXA)( VG_(args_for_client) ); i++) {
-         VG_(printf_xml_no_f_c)(
-            "    <arg>%t</arg>\n",
+         VG_(printf_xml)(
+            "    <arg>%pS</arg>\n",
             * (HChar**) VG_(indexXA)( VG_(args_for_client), i )
          );
       }
@@ -2170,12 +2170,12 @@
    if (VG_(clo_xml)) {
       HChar buf[50];
       VG_(elapsed_wallclock_time)(buf);
-      VG_(printf_xml_no_f_c)( "<status>\n"
+      VG_(printf_xml)( "<status>\n"
                               "  <state>RUNNING</state>\n"
-                              "  <time>%t</time>\n"
+                              "  <time>%pS</time>\n"
                               "</status>\n",
                               buf );
-      VG_(printf_xml_no_f_c)( "\n" );
+      VG_(printf_xml)( "\n" );
    }
 
    VG_(debugLog)(1, "main", "Running thread 1\n");
@@ -2280,9 +2280,9 @@
    if (VG_(clo_xml)) {
       HChar buf[50];
       VG_(elapsed_wallclock_time)(buf);
-      VG_(printf_xml_no_f_c)( "<status>\n"
+      VG_(printf_xml)( "<status>\n"
                               "  <state>FINISHED</state>\n"
-                              "  <time>%t</time>\n"
+                              "  <time>%pS</time>\n"
                               "</status>\n"
                               "\n",
                               buf);
diff --git a/coregrind/m_xarray.c b/coregrind/m_xarray.c
index 7491fdd..8c4c0e9 100644
--- a/coregrind/m_xarray.c
+++ b/coregrind/m_xarray.c
@@ -337,15 +337,6 @@
    va_end(vargs);
 }
 
-/* and again .. */
-void VG_(xaprintf_no_f_c)( XArray* dst, const HChar* format, ... )
-{
-   va_list vargs;
-   va_start(vargs, format);
-   VG_(vcbprintf)( add_char_to_XA, (void*)dst, format, vargs );
-   va_end(vargs);
-}
-
 
 /*--------------------------------------------------------------------*/
 /*--- end                                               m_xarray.c ---*/
diff --git a/exp-sgcheck/pc_common.c b/exp-sgcheck/pc_common.c
index 89846fd..fa1aa42 100644
--- a/exp-sgcheck/pc_common.c
+++ b/exp-sgcheck/pc_common.c
@@ -326,9 +326,9 @@
    
          emit( "  <auxwhat>Address %#lx expected vs actual:</auxwhat>\n",
                xe->XE.SorG.addr );
-         emiN( "  <auxwhat>Expected: %t</auxwhat>\n",
+         emiN( "  <auxwhat>Expected: %pS</auxwhat>\n",
                &xe->XE.SorG.expect[0] );
-         emiN( "  <auxwhat>Actual:   %t</auxwhat>\n", 
+         emiN( "  <auxwhat>Actual:   %pS</auxwhat>\n", 
                &xe->XE.SorG.actual[0] );
 
       } else {
@@ -433,14 +433,14 @@
       if (xml) {
 
          if (xe->XE.Heap.descr1)
-            emiN( "  %t\n",
+            emiN( "  %pS\n",
                   (HChar*)VG_(indexXA)( xe->XE.Heap.descr1, 0 ) );
          if (xe->XE.Heap.descr2)
-            emiN( "  %t\n",
+            emiN( "  %pS\n",
                   (HChar*)VG_(indexXA)( xe->XE.Heap.descr2, 0 ) );
          if (xe->XE.Heap.datasym[0] != 0)
             emiN( "  <auxwhat>Address 0x%llx is %llu bytes "
-                  "inside data symbol \"%t\"</auxwhat>\n",
+                  "inside data symbol \"%pS\"</auxwhat>\n",
                   (ULong)xe->XE.Heap.addr,
                   (ULong)xe->XE.Heap.datasymoff,
                   xe->XE.Heap.datasym );
diff --git a/exp-sgcheck/tests/bad_percentify.c b/exp-sgcheck/tests/bad_percentify.c
index 0d7f2b3..3fb73ee 100644
--- a/exp-sgcheck/tests/bad_percentify.c
+++ b/exp-sgcheck/tests/bad_percentify.c
@@ -447,12 +447,23 @@
                ret += myvprintf_int64(send, send_arg2, flags, 10, width, False,
                                       (ULong)(va_arg (vargs, UInt)));
             break;
-         case 'p': /* %p */
-            ret += 2;
-            send('0',send_arg2);
-            send('x',send_arg2);
-            ret += myvprintf_int64(send, send_arg2, flags, 16, width, True,
-                                   (ULong)((UWord)va_arg (vargs, void *)));
+         case 'p':
+            if (format[i+1] == 'S') {
+               i++;
+               /* %pS, like %s but escaping chars for XML safety */
+               /* Note: simplistic; ignores field width and flags */
+               char *str = va_arg (vargs, char *);
+               if (str == (char*) 0)
+                  str = "(null)";
+               ret += myvprintf_str_XML_simplistic(send, send_arg2, str);
+            } else {
+               /* %p */
+               ret += 2;
+               send('0',send_arg2);
+               send('x',send_arg2);
+               ret += myvprintf_int64(send, send_arg2, flags, 16, width, True,
+                                      (ULong)((UWord)va_arg (vargs, void *)));
+            }
             break;
          case 'x': /* %x */
          case 'X': /* %X */
@@ -480,13 +491,6 @@
                                  flags, width, str, format[i]=='S');
             break;
          }
-         case 't': { /* %t, like %s but escaping chars for XML safety */
-            /* Note: simplistic; ignores field width and flags */
-            char *str = va_arg (vargs, char *);
-            if (str == (char*) 0) str = "(null)";
-            ret += myvprintf_str_XML_simplistic(send, send_arg2, str);
-            break;
-         }
 
 //         case 'y': { /* %y - print symbol */
 //            Char buf[100];
diff --git a/helgrind/hg_errors.c b/helgrind/hg_errors.c
index 010f5e0..d7bc6ef 100644
--- a/helgrind/hg_errors.c
+++ b/helgrind/hg_errors.c
@@ -755,13 +755,6 @@
    emit_WRK(format, vargs);
    va_end(vargs);
 }
-static void emit_no_f_c ( HChar* format, ... )
-{
-   va_list vargs;
-   va_start(vargs, format);
-   emit_WRK(format, vargs);
-   va_end(vargs);
-}
 
 
 /* Announce (that is, print the point-of-creation) of 'thr'.  Only do
@@ -1052,8 +1045,8 @@
       if (xml) {
 
          emit( "  <xwhat>\n" );
-         emit_no_f_c(
-            "    <text>Thread #%d's call to %t failed</text>\n",
+         emit(
+            "    <text>Thread #%d's call to %pS failed</text>\n",
             (Int)xe->XE.PthAPIerror.thr->errmsg_index,
             xe->XE.PthAPIerror.fnname );
          emit( "    <hthreadid>%d</hthreadid>\n",
@@ -1065,7 +1058,7 @@
 
       } else {
 
-         emit_no_f_c( "Thread #%d's call to %t failed\n",
+         emit( "Thread #%d's call to %pS failed\n",
                       (Int)xe->XE.PthAPIerror.thr->errmsg_index,
                       xe->XE.PthAPIerror.fnname );
          emit( "   with error code %ld (%s)\n",
diff --git a/include/pub_tool_libcprint.h b/include/pub_tool_libcprint.h
index 1621851..5cd4e76 100644
--- a/include/pub_tool_libcprint.h
+++ b/include/pub_tool_libcprint.h
@@ -86,28 +86,18 @@
 extern UInt VG_(vprintf)  ( const HChar *format, va_list vargs )
                           PRINTF_CHECK(1, 0);
 
-// The "_no_f_c" functions here are just like their non-"_no_f_c" counterparts
-// but without the PRINTF_CHECK, so they can be used with our non-standard %t
-// format specifier.
-
-// These are the same as the non "_xml" versions above, except the
-// output goes on the selected XML output channel instead of the
-// normal one.
 extern UInt VG_(printf_xml)  ( const HChar *format, ... )
                              PRINTF_CHECK(1, 2);
 
 extern UInt VG_(vprintf_xml) ( const HChar *format, va_list vargs )
                              PRINTF_CHECK(1, 0);
 
-extern UInt VG_(printf_xml_no_f_c) ( const HChar *format, ... );
-
 /* Yet another, totally general, version of vprintf, which hands all
    output bytes to CHAR_SINK, passing it OPAQUE as the second arg. */
 extern void VG_(vcbprintf)( void(*char_sink)(HChar, void* opaque),
                             void* opaque,
                             const HChar* format, va_list vargs );
 
-extern UInt VG_(message_no_f_c)( VgMsgKind kind, const HChar* format, ... );
 extern UInt VG_(message)( VgMsgKind kind, const HChar* format, ... )
    PRINTF_CHECK(2, 3);
 
diff --git a/include/pub_tool_xarray.h b/include/pub_tool_xarray.h
index b7c646e..69a8eac 100644
--- a/include/pub_tool_xarray.h
+++ b/include/pub_tool_xarray.h
@@ -138,15 +138,10 @@
 /* Convenience function: printf into an XArray of HChar, adding stuff
    at the end.  This is very convenient for concocting arbitrary
    length printf output in an XArray.  Note that the resulting string
-   is NOT zero-terminated.  Versions are provided with and without a
-   format check, the latter so the unknown (to gcc) "%t" can be used
-   without gcc complaining. */
+   is NOT zero-terminated. */
 extern void VG_(xaprintf)( XArray* dst, const HChar* format, ... )
                          PRINTF_CHECK(2, 3);
 
-extern void VG_(xaprintf_no_f_c)
-                         ( XArray* dst, const HChar* format, ... );
-
 #endif   // __PUB_TOOL_XARRAY_H
 
 /*--------------------------------------------------------------------*/
diff --git a/memcheck/mc_errors.c b/memcheck/mc_errors.c
index 4e2e019..36d3595 100644
--- a/memcheck/mc_errors.c
+++ b/memcheck/mc_errors.c
@@ -349,7 +349,7 @@
 
       case Addr_DataSym:
          emiN( "%sAddress 0x%llx is %llu bytes "
-               "inside data symbol \"%t\"%s\n",
+               "inside data symbol \"%pS\"%s\n",
                xpre,
                (ULong)a,
                (ULong)ai->Addr.DataSym.offset,
@@ -372,7 +372,7 @@
          break;
 
       case Addr_SectKind:
-         emiN( "%sAddress 0x%llx is in the %t segment of %t%s\n",
+         emiN( "%sAddress 0x%llx is in the %pS segment of %pS%s\n",
                xpre,
                (ULong)a,
                VG_(pp_SectKind)(ai->Addr.SectKind.kind),
@@ -460,7 +460,7 @@
          // the following code is untested.  Bad.
          if (xml) {
             emit( "  <kind>CoreMemError</kind>\n" );
-            emiN( "  <what>%t contains unaddressable byte(s)</what>\n",
+            emiN( "  <what>%pS contains unaddressable byte(s)</what>\n",
                   VG_(get_error_string)(err));
             VG_(pp_ExeContext)( VG_(get_error_where)(err) );
          } else {
@@ -518,7 +518,7 @@
          MC_(any_value_errors) = True;
          if (xml) {
             emit( "  <kind>SyscallParam</kind>\n" );
-            emiN( "  <what>Syscall param %t contains "
+            emiN( "  <what>Syscall param %pS contains "
                   "uninitialised byte(s)</what>\n",
                   VG_(get_error_string)(err) );
             VG_(pp_ExeContext)( VG_(get_error_where)(err) );
@@ -540,7 +540,7 @@
             MC_(any_value_errors) = True;
          if (xml) {
             emit( "  <kind>SyscallParam</kind>\n" );
-            emiN( "  <what>Syscall param %t points to %s byte(s)</what>\n",
+            emiN( "  <what>Syscall param %pS points to %s byte(s)</what>\n",
                   VG_(get_error_string)(err),
                   extra->Err.MemParam.isAddrErr 
                      ? "unaddressable" : "uninitialised" );
@@ -669,7 +669,7 @@
             emit( "  <kind>Overlap</kind>\n" );
             if (extra->Err.Overlap.szB == 0) {
                emiN( "  <what>Source and destination overlap "
-                     "in %t(%#lx, %#lx)\n</what>\n",
+                     "in %pS(%#lx, %#lx)\n</what>\n",
                      VG_(get_error_string)(err),
                      extra->Err.Overlap.dst, extra->Err.Overlap.src );
             } else {
@@ -682,7 +682,7 @@
             VG_(pp_ExeContext)( VG_(get_error_where)(err) );
          } else {
             if (extra->Err.Overlap.szB == 0) {
-               emiN( "Source and destination overlap in %t(%#lx, %#lx)\n",
+               emiN( "Source and destination overlap in %pS(%#lx, %#lx)\n",
                      VG_(get_error_string)(err),
                      extra->Err.Overlap.dst, extra->Err.Overlap.src );
             } else {
