diff --git a/nptl/Makefile b/nptl/Makefile
index 869a732930..fc4e511d8b 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -81,7 +81,7 @@ static-only-routines = pthread_atfork
 # We need to provide certain routines for compatibility with existing
 # binaries.
 pthread-compat-wrappers = \
-		      tcdrain msgrcv msgsnd \
+		      msgrcv msgsnd \
 		      sigwait sigsuspend \
 		      recvmsg sendmsg
 
@@ -286,7 +286,6 @@ CFLAGS-lockf.c += -fexceptions
 CFLAGS-sigwait.c += -fexceptions -fasynchronous-unwind-tables
 CFLAGS-msgrcv.c += -fexceptions -fasynchronous-unwind-tables
 CFLAGS-msgsnd.c += -fexceptions -fasynchronous-unwind-tables
-CFLAGS-tcdrain.c += -fexceptions -fasynchronous-unwind-tables
 CFLAGS-recvmsg.c += -fexceptions -fasynchronous-unwind-tables
 CFLAGS-sendmsg.c += -fexceptions -fasynchronous-unwind-tables
 CFLAGS-sigsuspend.c += -fexceptions -fasynchronous-unwind-tables
diff --git a/nptl/Versions b/nptl/Versions
index f8e6a9f260..f5a821c96c 100644
--- a/nptl/Versions
+++ b/nptl/Versions
@@ -173,7 +173,6 @@ libpthread {
     siglongjmp;
     sigwait;
     system;
-    tcdrain;
   }
 
   GLIBC_2.1 {
diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index d1ab2dff1d..65a6157f48 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -156,7 +156,6 @@ GLIBC_2.17 sigaction F
 GLIBC_2.17 siglongjmp F
 GLIBC_2.17 sigwait F
 GLIBC_2.17 system F
-GLIBC_2.17 tcdrain F
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
 GLIBC_2.28 call_once F
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index 681bbef648..c07f36a6b5 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -68,7 +68,6 @@ GLIBC_2.0 sigaction F
 GLIBC_2.0 siglongjmp F
 GLIBC_2.0 sigwait F
 GLIBC_2.0 system F
-GLIBC_2.0 tcdrain F
 GLIBC_2.1 __libc_allocate_rtsig F
 GLIBC_2.1 __libc_current_sigrtmax F
 GLIBC_2.1 __libc_current_sigrtmin F
diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
index 2ee38e0d0f..1ab2689f9b 100644
--- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -172,7 +172,6 @@ GLIBC_2.32 sem_wait F
 GLIBC_2.32 sendmsg F
 GLIBC_2.32 sigaction F
 GLIBC_2.32 sigwait F
-GLIBC_2.32 tcdrain F
 GLIBC_2.32 thrd_create F
 GLIBC_2.32 thrd_detach F
 GLIBC_2.32 thrd_exit F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
index c1823e4c83..28fa2c879c 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
@@ -185,4 +185,3 @@ GLIBC_2.4 sigaction F
 GLIBC_2.4 siglongjmp F
 GLIBC_2.4 sigwait F
 GLIBC_2.4 system F
-GLIBC_2.4 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
index c1823e4c83..28fa2c879c 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
@@ -185,4 +185,3 @@ GLIBC_2.4 sigaction F
 GLIBC_2.4 siglongjmp F
 GLIBC_2.4 sigwait F
 GLIBC_2.4 system F
-GLIBC_2.4 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
index e265ad54be..767e19c10e 100644
--- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
@@ -166,7 +166,6 @@ GLIBC_2.29 sem_wait F
 GLIBC_2.29 sendmsg F
 GLIBC_2.29 sigaction F
 GLIBC_2.29 sigwait F
-GLIBC_2.29 tcdrain F
 GLIBC_2.29 thrd_create F
 GLIBC_2.29 thrd_detach F
 GLIBC_2.29 thrd_exit F
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index be2425ec5c..36243c9f1f 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -136,7 +136,6 @@ GLIBC_2.2 sigaction F
 GLIBC_2.2 siglongjmp F
 GLIBC_2.2 sigwait F
 GLIBC_2.2 system F
-GLIBC_2.2 tcdrain F
 GLIBC_2.2.3 __libpthread_version_placeholder F
 GLIBC_2.2.6 __libpthread_version_placeholder F
 GLIBC_2.28 call_once F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index 177a1387a2..1295d86f81 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -68,7 +68,6 @@ GLIBC_2.0 sigaction F
 GLIBC_2.0 siglongjmp F
 GLIBC_2.0 sigwait F
 GLIBC_2.0 system F
-GLIBC_2.0 tcdrain F
 GLIBC_2.1 __libc_allocate_rtsig F
 GLIBC_2.1 __libc_current_sigrtmax F
 GLIBC_2.1 __libc_current_sigrtmin F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index ee3b8e7e11..80c8c452b7 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -136,7 +136,6 @@ GLIBC_2.2 sigaction F
 GLIBC_2.2 siglongjmp F
 GLIBC_2.2 sigwait F
 GLIBC_2.2 system F
-GLIBC_2.2 tcdrain F
 GLIBC_2.2.3 __libpthread_version_placeholder F
 GLIBC_2.2.6 __libpthread_version_placeholder F
 GLIBC_2.28 call_once F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index c1823e4c83..28fa2c879c 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -185,4 +185,3 @@ GLIBC_2.4 sigaction F
 GLIBC_2.4 siglongjmp F
 GLIBC_2.4 sigwait F
 GLIBC_2.4 system F
-GLIBC_2.4 tcdrain F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index 177a1387a2..1295d86f81 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -68,7 +68,6 @@ GLIBC_2.0 sigaction F
 GLIBC_2.0 siglongjmp F
 GLIBC_2.0 sigwait F
 GLIBC_2.0 system F
-GLIBC_2.0 tcdrain F
 GLIBC_2.1 __libc_allocate_rtsig F
 GLIBC_2.1 __libc_current_sigrtmax F
 GLIBC_2.1 __libc_current_sigrtmin F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
index 3574b4252e..12f96389bc 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -158,7 +158,6 @@ GLIBC_2.18 sigaction F
 GLIBC_2.18 siglongjmp F
 GLIBC_2.18 sigwait F
 GLIBC_2.18 system F
-GLIBC_2.18 tcdrain F
 GLIBC_2.28 call_once F
 GLIBC_2.28 cnd_broadcast F
 GLIBC_2.28 cnd_destroy F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
index 3574b4252e..12f96389bc 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -158,7 +158,6 @@ GLIBC_2.18 sigaction F
 GLIBC_2.18 siglongjmp F
 GLIBC_2.18 sigwait F
 GLIBC_2.18 system F
-GLIBC_2.18 tcdrain F
 GLIBC_2.28 call_once F
 GLIBC_2.28 cnd_broadcast F
 GLIBC_2.28 cnd_destroy F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index 4d5e53b8ba..a3d38c87cc 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -68,7 +68,6 @@ GLIBC_2.0 sigaction F
 GLIBC_2.0 siglongjmp F
 GLIBC_2.0 sigwait F
 GLIBC_2.0 system F
-GLIBC_2.0 tcdrain F
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
 GLIBC_2.12 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index 4d5e53b8ba..a3d38c87cc 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -68,7 +68,6 @@ GLIBC_2.0 sigaction F
 GLIBC_2.0 siglongjmp F
 GLIBC_2.0 sigwait F
 GLIBC_2.0 system F
-GLIBC_2.0 tcdrain F
 GLIBC_2.11 pthread_sigqueue F
 GLIBC_2.12 pthread_getname_np F
 GLIBC_2.12 pthread_mutex_consistent F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index 2019ddd761..ef585dd6ad 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -158,7 +158,6 @@ GLIBC_2.21 sigaction F
 GLIBC_2.21 siglongjmp F
 GLIBC_2.21 sigwait F
 GLIBC_2.21 system F
-GLIBC_2.21 tcdrain F
 GLIBC_2.28 call_once F
 GLIBC_2.28 cnd_broadcast F
 GLIBC_2.28 cnd_destroy F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index 131e902498..509954e8a3 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -68,7 +68,6 @@ GLIBC_2.0 sigaction F
 GLIBC_2.0 siglongjmp F
 GLIBC_2.0 sigwait F
 GLIBC_2.0 system F
-GLIBC_2.0 tcdrain F
 GLIBC_2.1 __libc_allocate_rtsig F
 GLIBC_2.1 __libc_current_sigrtmax F
 GLIBC_2.1 __libc_current_sigrtmin F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
index 67d29ec179..d4c0f30062 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -156,7 +156,6 @@ GLIBC_2.3 sigaction F
 GLIBC_2.3 siglongjmp F
 GLIBC_2.3 sigwait F
 GLIBC_2.3 system F
-GLIBC_2.3 tcdrain F
 GLIBC_2.3.2 pthread_cond_broadcast F
 GLIBC_2.3.2 pthread_cond_signal F
 GLIBC_2.3.2 pthread_cond_timedwait F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
index d1ab2dff1d..65a6157f48 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -156,7 +156,6 @@ GLIBC_2.17 sigaction F
 GLIBC_2.17 siglongjmp F
 GLIBC_2.17 sigwait F
 GLIBC_2.17 system F
-GLIBC_2.17 tcdrain F
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
 GLIBC_2.28 call_once F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
index 9485f30a50..2dec98bb41 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
@@ -172,7 +172,6 @@ GLIBC_2.33 sem_wait F
 GLIBC_2.33 sendmsg F
 GLIBC_2.33 sigaction F
 GLIBC_2.33 sigwait F
-GLIBC_2.33 tcdrain F
 GLIBC_2.33 thrd_create F
 GLIBC_2.33 thrd_detach F
 GLIBC_2.33 thrd_exit F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
index 3befde3559..e85d94d7d4 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -155,7 +155,6 @@ GLIBC_2.27 sem_wait F
 GLIBC_2.27 sendmsg F
 GLIBC_2.27 sigaction F
 GLIBC_2.27 sigwait F
-GLIBC_2.27 tcdrain F
 GLIBC_2.28 call_once F
 GLIBC_2.28 cnd_broadcast F
 GLIBC_2.28 cnd_destroy F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index 2291fb3015..5756f635ff 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -68,7 +68,6 @@ GLIBC_2.0 sigaction F
 GLIBC_2.0 siglongjmp F
 GLIBC_2.0 sigwait F
 GLIBC_2.0 system F
-GLIBC_2.0 tcdrain F
 GLIBC_2.1 __libc_allocate_rtsig F
 GLIBC_2.1 __libc_current_sigrtmax F
 GLIBC_2.1 __libc_current_sigrtmin F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index 3199177ab1..d8fa781856 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -138,7 +138,6 @@ GLIBC_2.2 sigaction F
 GLIBC_2.2 siglongjmp F
 GLIBC_2.2 sigwait F
 GLIBC_2.2 system F
-GLIBC_2.2 tcdrain F
 GLIBC_2.2.3 __libpthread_version_placeholder F
 GLIBC_2.2.6 __libpthread_version_placeholder F
 GLIBC_2.28 call_once F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
index be2425ec5c..36243c9f1f 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -136,7 +136,6 @@ GLIBC_2.2 sigaction F
 GLIBC_2.2 siglongjmp F
 GLIBC_2.2 sigwait F
 GLIBC_2.2 system F
-GLIBC_2.2 tcdrain F
 GLIBC_2.2.3 __libpthread_version_placeholder F
 GLIBC_2.2.6 __libpthread_version_placeholder F
 GLIBC_2.28 call_once F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
index be2425ec5c..36243c9f1f 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -136,7 +136,6 @@ GLIBC_2.2 sigaction F
 GLIBC_2.2 siglongjmp F
 GLIBC_2.2 sigwait F
 GLIBC_2.2 system F
-GLIBC_2.2 tcdrain F
 GLIBC_2.2.3 __libpthread_version_placeholder F
 GLIBC_2.2.6 __libpthread_version_placeholder F
 GLIBC_2.28 call_once F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index 681bbef648..c07f36a6b5 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -68,7 +68,6 @@ GLIBC_2.0 sigaction F
 GLIBC_2.0 siglongjmp F
 GLIBC_2.0 sigwait F
 GLIBC_2.0 system F
-GLIBC_2.0 tcdrain F
 GLIBC_2.1 __libc_allocate_rtsig F
 GLIBC_2.1 __libc_current_sigrtmax F
 GLIBC_2.1 __libc_current_sigrtmin F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index ee3b8e7e11..80c8c452b7 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -136,7 +136,6 @@ GLIBC_2.2 sigaction F
 GLIBC_2.2 siglongjmp F
 GLIBC_2.2 sigwait F
 GLIBC_2.2 system F
-GLIBC_2.2 tcdrain F
 GLIBC_2.2.3 __libpthread_version_placeholder F
 GLIBC_2.2.6 __libpthread_version_placeholder F
 GLIBC_2.28 call_once F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index 45542686ac..7efecf5df6 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -136,7 +136,6 @@ GLIBC_2.2.5 sigaction F
 GLIBC_2.2.5 siglongjmp F
 GLIBC_2.2.5 sigwait F
 GLIBC_2.2.5 system F
-GLIBC_2.2.5 tcdrain F
 GLIBC_2.2.6 __libpthread_version_placeholder F
 GLIBC_2.28 call_once F
 GLIBC_2.28 cnd_broadcast F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
index 5aa5002eb0..78ada58f42 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -156,7 +156,6 @@ GLIBC_2.16 sigaction F
 GLIBC_2.16 siglongjmp F
 GLIBC_2.16 sigwait F
 GLIBC_2.16 system F
-GLIBC_2.16 tcdrain F
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
 GLIBC_2.28 call_once F
