diff --git a/sysdeps/unix/sh/sysdep.S b/sysdeps/unix/sh/sysdep.S
deleted file mode 100644
index dc9a230ee0..0000000000
--- a/sysdeps/unix/sh/sysdep.S
+++ /dev/null
@@ -1,115 +0,0 @@
-/* Copyright (C) 1999-2020 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-#include <errno.h>
-
-ENTRY(__syscall_error)
-#if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN
-	/* We translate the system's EWOULDBLOCK error into EAGAIN.
-	   The GNU C library always defines EWOULDBLOCK==EAGAIN.
-	   EWOULDBLOCK_sys is the original number.  */
-	mov.l	.L1, r1
-	cmp/eq	r1, r0
-	bf	skip
-	nop
-	mov.l	.L2, r0
-skip:
-#endif
-	/* Store it in errno... */
-#ifndef SHARED
-#ifndef _LIBC_REENTRANT
-	mov.l	.L3, r1
-	mov.l	r0, @r1
-#else
-	mov.l	.L3, r1
-	sts.l	pr, @-r15
-	cfi_adjust_cfa_offset (4)
-	cfi_rel_offset (pr, 0)
-	mov.l	r0, @-r15
-	cfi_adjust_cfa_offset (4)
-	jsr	@r1
-	 nop
-	mov.l	@r15+, r1
-	cfi_adjust_cfa_offset (-4)
-	lds.l	@r15+, pr
-	cfi_adjust_cfa_offset (-4)
-	cfi_restore (pr)
-	mov.l	r1, @r0
-#endif
-#else
-	mov.l	r12, @-r15
-	cfi_adjust_cfa_offset (4)
-	cfi_rel_offset (r12, 0)
-#ifndef _LIBC_REENTRANT
-	mov	r0, r2
-        mov.l	0f, r12
-	mova	0f, r0
-	add	r0, r12
-	mov.l	.L3, r0
-	mov.l	@(r0,r12), r1
-	mov.l	r2, @r1
-#else
-	mov.l	r0, @-r15
-	cfi_adjust_cfa_offset (4)
-	sts.l	pr, @-r15
-	cfi_adjust_cfa_offset (4)
-	cfi_rel_offset (pr, 0)
-        mov.l	0f, r12
-	mova	0f, r0
-	add	r0, r12
-	mov.l	.L3, r1
-	mova	.L3, r0
-	add	r0, r1
-	jsr	@r1
-	 nop
-	lds.l	@r15+, pr
-	cfi_adjust_cfa_offset (-4)
-	cfi_restore (pr)
-	mov.l	@r15+, r1
-	cfi_adjust_cfa_offset (-4)
-	mov.l	r1, @r0
-#endif
-	mov.l	@r15+, r12
-	cfi_adjust_cfa_offset (-4)
-	cfi_restore (r12)
-#endif
-	/* And just kick back a -1.  */
-	rts
-	 mov	#-1, r0
-
-	.align	2
-#if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN
-.L1:	.long	EWOULDBLOCK_sys
-.L2:	.long	EAGAIN
-#endif
-#ifndef SHARED
-#ifndef _LIBC_REENTRANT
-.L3:	.long	C_SYMBOL_NAME(errno)
-#else
-.L3:	.long	C_SYMBOL_NAME(__errno_location)
-#endif
-#else
-0:
-	.long	_GLOBAL_OFFSET_TABLE_
-#ifndef _LIBC_REENTRANT
-.L3:	.long	C_SYMBOL_NAME(errno@GOT)
-#else
-.L3:	.long	C_SYMBOL_NAME(__errno_location@PLT)
-#endif
-#endif
-END(__syscall_error)
diff --git a/sysdeps/unix/sysv/linux/sh/localplt.data b/sysdeps/unix/sysv/linux/sh/localplt.data
index 3225177c50..9d8154648b 100644
--- a/sysdeps/unix/sysv/linux/sh/localplt.data
+++ b/sysdeps/unix/sysv/linux/sh/localplt.data
@@ -8,7 +8,6 @@ libc.so: memalign
 libc.so: realloc
 libc.so: _Unwind_Find_FDE
 libc.so: _exit
-libc.so: __errno_location
 libm.so: matherr
 # Generated by the compiler because there is no trap insn pattern.
 libc.so: abort ?
diff --git a/sysdeps/unix/sysv/linux/sh/sysdep.S b/sysdeps/unix/sysv/linux/sh/sysdep.S
deleted file mode 100644
index 85ff3f900e..0000000000
--- a/sysdeps/unix/sysv/linux/sh/sysdep.S
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright (C) 1995-2020 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-
-/* The syscall stubs jump here when they detect an error.
-   The code for Linux is almost identical to the canonical Unix
-   code, except that the error number in R0 is negated.  */
-
-#undef CALL_MCOUNT
-#define CALL_MCOUNT /* Don't insert the profiling call, it clobbers R0.  */
-
-ENTRY (__syscall_error)
-	neg r4, r0
-	cfi_endproc
-
-#define __syscall_error __syscall_error_1
-#include <sysdeps/unix/sh/sysdep.S>
diff --git a/sysdeps/unix/sysv/linux/sh/sysdep.h b/sysdeps/unix/sysv/linux/sh/sysdep.h
index 60a5032ce4..511406b5dc 100644
--- a/sysdeps/unix/sysv/linux/sh/sysdep.h
+++ b/sysdeps/unix/sysv/linux/sh/sysdep.h
@@ -20,6 +20,8 @@
 #ifndef _LINUX_SH_SYSDEP_H
 #define _LINUX_SH_SYSDEP_H 1
 
+#define SYSCALL_ERROR_FUNC
+
 /* There is some commonality.  */
 #include <sysdeps/unix/sysv/linux/sysdep.h>
 #include <sysdeps/unix/sh/sysdep.h>
