Index: coregrind/m_syswrap/syswrap-linux.c
===================================================================
--- coregrind/m_syswrap/syswrap-linux.c	(revision 5643)
+++ coregrind/m_syswrap/syswrap-linux.c	(working copy)
@@ -867,30 +867,32 @@
    PRE_REG_READ1(long, "set_tid_address", int *, tidptr);
 }
 
-//zz PRE(sys_tkill, Special)
-//zz {
-//zz    /* int tkill(pid_t tid, int sig); */
-//zz    PRINT("sys_tkill ( %d, %d )", ARG1,ARG2);
-//zz    PRE_REG_READ2(long, "tkill", int, tid, int, sig);
-//zz    if (!ML_(client_signal_OK)(ARG2)) {
-//zz       SET_STATUS_( -VKI_EINVAL );
-//zz       return;
-//zz    }
-//zz 
-//zz    /* If we're sending SIGKILL, check to see if the target is one of
-//zz       our threads and handle it specially. */
-//zz    if (ARG2 == VKI_SIGKILL && ML_(do_sigkill)(ARG1, -1))
-//zz       SET_STATUS_(0);
-//zz    else
-//zz       SET_STATUS_(VG_(do_syscall2)(SYSNO, ARG1, ARG2));
-//zz 
-//zz    if (VG_(clo_trace_signals))
-//zz       VG_(message)(Vg_DebugMsg, "tkill: sent signal %d to pid %d",
-//zz 		   ARG2, ARG1);
-//zz    // Check to see if this kill gave us a pending signal
-//zz    XXX FIXME VG_(poll_signals)(tid);
-//zz }
+PRE(sys_tkill)
+{
+   /* int tkill(pid_t tid, int sig); */
+   PRINT("sys_tkill ( %d, %d )", ARG1, ARG2);
+   PRE_REG_READ2(long, "tkill", int, tid, int, sig);
+   if (!ML_(client_signal_OK)(ARG2)) {
+      SET_STATUS_Failure( VKI_EINVAL );
+      return;
+   }
 
+   /* If we're sending SIGKILL, check to see if the target is one of
+      our threads and handle it specially. */
+/* EPP    if (ARG2 == VKI_SIGKILL && ML_(do_sigkill)(ARG1, -1)) */
+/* EPP       SET_STATUS_Success(0); */
+/* EPP    else */
+      SET_STATUS_from_SysRes( VG_(do_syscall2)(SYSNO, ARG1, ARG2) );
+
+   if (VG_(clo_trace_signals))
+      VG_(message)(Vg_DebugMsg, "tkill: sent signal %d to tid %d",
+		   ARG2, ARG1);
+
+   /* This kill might have given us a pending signal.  Ask for a check once 
+      the syscall is done. */
+   *flags |= SfPollAfter;
+}
+
 PRE(sys_tgkill)
 {
    PRINT("sys_tgkill ( %d, %d, %d )", ARG1,ARG2,ARG3);
Index: coregrind/m_syswrap/syswrap-x86-linux.c
===================================================================
--- coregrind/m_syswrap/syswrap-x86-linux.c	(revision 5643)
+++ coregrind/m_syswrap/syswrap-x86-linux.c	(working copy)
@@ -2050,7 +2050,7 @@
    LINX_(__NR_removexattr,       sys_removexattr),    // 235
    LINX_(__NR_lremovexattr,      sys_lremovexattr),   // 236
    LINX_(__NR_fremovexattr,      sys_fremovexattr),   // 237
-//zz    LINX_(__NR_tkill,             sys_tkill),          // 238 */Linux
+   LINX_(__NR_tkill,             sys_tkill),          // 238 */Linux
    LINXY(__NR_sendfile64,        sys_sendfile64),     // 239
 
    LINXY(__NR_futex,             sys_futex),             // 240
