diff --git a/coregrind/vg_mylibc.c b/coregrind/vg_mylibc.c
index c8d2642..60f969f 100644
--- a/coregrind/vg_mylibc.c
+++ b/coregrind/vg_mylibc.c
@@ -662,21 +662,18 @@
 
 
 /* A general replacement for sprintf(). */
-static Char* vg_sprintf_ptr;
-
-static void add_to_vg_sprintf_buf ( Char c )
-{
-   *vg_sprintf_ptr++ = c;
-}
-
 UInt VG_(sprintf) ( Char* buf, Char *format, ... )
 {
    UInt ret;
-
    va_list vargs;
+   Char *ptr = buf;
+   static void add_to_vg_sprintf_buf ( Char c )
+   {
+      *ptr++ = c;
+   }
+   
    va_start(vargs,format);
 
-   vg_sprintf_ptr = buf;
    ret = VG_(vprintf) ( add_to_vg_sprintf_buf, format, vargs );
    add_to_vg_sprintf_buf(0);
 
diff --git a/coregrind/vg_symtab2.c b/coregrind/vg_symtab2.c
index c1619ec..6283fad 100644
--- a/coregrind/vg_symtab2.c
+++ b/coregrind/vg_symtab2.c
@@ -2085,10 +2085,12 @@
    call has come from vg_what_fn_or_object_is_this. */
 static
 Bool get_fnname ( Bool demangle, Addr a, Char* buf, Int nbuf,
-                  Bool match_anywhere_in_fun )
+                  Bool match_anywhere_in_fun, Bool show_offset)
 {
    SegInfo* si;
    Int      sno;
+   Int      offset;
+
    search_all_symtabs ( a, &si, &sno, match_anywhere_in_fun );
    if (si == NULL) 
       return False;
@@ -2098,6 +2100,25 @@
       VG_(strncpy_safely) 
          ( buf, & si->strtab[si->symtab[sno].nmoff], nbuf );
    }
+
+   offset = a - si->symtab[sno].addr;
+   if (show_offset && offset != 0) {
+      Char     buf2[12];
+      Char*    symend = buf + VG_(strlen)(buf);
+      Char*    end = buf + nbuf;
+      Int      len;
+
+      len = VG_(sprintf)(buf2, "%c%d",
+			 offset < 0 ? '-' : '+',
+			 offset < 0 ? -offset : offset);
+      vg_assert(len < sizeof(buf2));
+
+      if (len < (end - symend)) {
+	 Char *cp = buf2;
+	 VG_(memcpy)(symend, cp, len+1);
+      }
+   }
+
    return True;
 }
 
@@ -2105,7 +2126,7 @@
 Bool VG_(get_fnname) ( Addr a, Char* buf, Int nbuf )
 {
    return get_fnname ( /*demangle*/True, a, buf, nbuf,
-                       /*match_anywhere_in_fun*/True );
+                       /*match_anywhere_in_fun*/True, True );
 }
 
 /* This is available to skins... always demangle C++ names,
@@ -2113,14 +2134,14 @@
 Bool VG_(get_fnname_if_entry) ( Addr a, Char* buf, Int nbuf )
 {
    return get_fnname ( /*demangle*/True, a, buf, nbuf,
-                       /*match_anywhere_in_fun*/False );
+                       /*match_anywhere_in_fun*/False, False );
 }
 
 /* This is only available to core... don't demangle C++ names */
 Bool VG_(get_fnname_nodemangle) ( Addr a, Char* buf, Int nbuf )
 {
    return get_fnname ( /*demangle*/False, a, buf, nbuf,
-                       /*match_anywhere_in_fun*/True );
+                       /*match_anywhere_in_fun*/True, False );
 }
 
 /* Map a code address to the name of a shared object file or the executable.
@@ -2217,7 +2238,7 @@
    i = 0;
    do {
       n = 0;
-      know_fnname  = VG_(get_fnname) (ec->eips[i], buf_fn,  M_VG_ERRTXT);
+      know_fnname  = get_fnname (True, ec->eips[i], buf_fn,  M_VG_ERRTXT, True, False);
       know_objname = VG_(get_objname)(ec->eips[i], buf_obj, M_VG_ERRTXT);
       know_srcloc  = VG_(get_filename_linenum)(ec->eips[i], 
                                                buf_srcloc, M_VG_ERRTXT, 
