Format functions: change format specifier %t into %pS. Remove the _no_f_c formatting function variants.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12108 a5019735-40e9-0310-863c-91ae7b9d1cf9
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 {