Move some chown / lchown / fchown definitions to syscalls.list (bug 14138)
diff mbox

Message ID Pine.LNX.4.64.1409240042400.8132@digraph.polyomino.org.uk
State New
Headers show

Commit Message

Joseph Myers Sept. 24, 2014, 12:44 a.m. UTC
Continuing the move of syscall definitions to syscalls.list, where the
removal of support for old kernel versions has made this possible,
this patch moves various definitions of chown, lchown and fchown.

In most cases the need for special syscalls.list entries (rather than
existing generic ones) is because these architectures use chown32,
lchown32 and fchown32 as syscall names.  Some architectures also have
symbol versioning compatibility for older versions of chown having
been equivalent to lchown.

The i386/chown.c and s390/s390-32/chown.c files, implementing such a
version of chown@GLIBC_2.0 as equivalent to lchown, are not removed as
that would replace a wrapper round __lchown with a separate copy of
the syscall code; although fairly harmless, that still seems
suboptimal; it would be better to add support for compat symbols as
proper aliases for other symbols in syscalls.list, then remove them
that way.  In the case of powerpc, chown.c (providing the
chown@@GLIBC_2.1 default version) is replaced by a syscalls.list entry
(for powerpc32; powerpc64 has no need for this because of its more
recent minimum symbol version, so can just use the entry in
sysdeps/unix/syscalls.list), but lchown.S is left as-is because it
provides the compat version of chown as an actual alias for __lchown,
which is not yet supported by syscalls.list.  All three files can be
removed once such aliases are supported in syscalls.list.

The aliases specified for s390-32 had the effect of exporting
__chown@@GLIBC_2.1 (but not __chown@GLIBC_2.0) despite it not being
listed in Versions files.  (I'm not sure why versioned_symbol but not
compat_symbol were effective like that to create such __chown exports
in the absence of Versions entries.)  The natural way to preserve that
versioned export of __chown seems to be to add it in a Versions file,
so I did so.  (Maybe actually it should be a compat symbol,
__chown@GLIBC_2.1, unless there's a good reason for that export, but
this patch doesn't change anything there.)

Because the i386 and s390-32 files are not removed, the syscalls.list
entries for chown for those architectures list newchown in the file
name column (as if there are both a source file <file>.c and a
syscalls.list entry for <file> in the same sysdeps directory, only one
will get used, and both need using in this case).

Tested for x86.

2014-09-24  Joseph Myers  <joseph@codesourcery.com>

	[BZ #14138]
	* sysdeps/unix/sysv/linux/arm/fchown.c: Remove file.
	* sysdeps/unix/sysv/linux/arm/lchown.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/chown.c (__real_chown): Remove
	function.
	(chown): Remove alias.
	(__chown): Likewise.
	* sysdeps/unix/sysv/linux/i386/fchown.c: Remove file.
	* sysdeps/unix/sysv/linux/i386/lchown.c: Likewise.
	* sysdeps/unix/sysv/linux/m68k/fchown.c: Likewise.
	* sysdeps/unix/sysv/linux/m68k/lchown.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/chown.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/chown.c (__real_chown):
	Remove function.
	(_real_chown): Remove alias.
	(chown): Likewise.
	(__chown): Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/Versions (GLIBC_2.1): Add
	__chown.
	* sysdeps/unix/sysv/linux/s390/s390-32/fchown.c: Remove file.
	* sysdeps/unix/sysv/linux/s390/s390-32/lchown.c: Likewise.
	* sysdeps/unix/sysv/linux/sh/chown.c: Likewise.
	* sysdeps/unix/sysv/linux/sh/fchown.c: Likewise.
	* sysdeps/unix/sysv/linux/sh/lchown.c: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/chown.c: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/fchown.c: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/lchown.c: Likewise.
	* sysdeps/unix/sysv/linux/arm/syscalls.list (lchown): Add syscall.
	(fchown): Likewise.
	* sysdeps/unix/sysv/linux/i386/syscalls.list (newchown): Likewise.
	(lchown): Likewise.
	(fchown): Likewise.
	* sysdeps/unix/sysv/linux/m68k/syscalls.list (lchown): Likewise.
	(fchown): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list (chown):
	Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list (newchown):
	Likewise.
	(lchown): Likewise.
	(fchown): Likewise.
	* sysdeps/unix/sysv/linux/sh/syscalls.list (chown): Likewise.
	(lchown): Likewise.
	(fchown): Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list (chown):
	Likewise.
	(lchown): Likewise.
	(fchown): Likewise.

Comments

Andreas Schwab Sept. 24, 2014, 8:17 a.m. UTC | #1
"Joseph S. Myers" <joseph@codesourcery.com> writes:

> 	* sysdeps/unix/sysv/linux/m68k/fchown.c: Likewise.
> 	* sysdeps/unix/sysv/linux/m68k/lchown.c: Likewise.
> 	* sysdeps/unix/sysv/linux/m68k/syscalls.list (lchown): Likewise.
> 	(fchown): Likewise.

This is ok.

Andreas.
Joseph Myers Sept. 30, 2014, 2:41 p.m. UTC | #2
Ping.  This patch 
<https://sourceware.org/ml/libc-alpha/2014-09/msg00546.html> is pending 
review (apart from the m68k bits).
Joseph Myers Oct. 6, 2014, 10:04 a.m. UTC | #3
Ping^2.  This patch 
<https://sourceware.org/ml/libc-alpha/2014-09/msg00546.html> is still 
pending review (apart from the m68k bits).
Adhemerval Zanella Oct. 6, 2014, 8:16 p.m. UTC | #4
On 23-09-2014 21:44, Joseph S. Myers wrote:
> 	* sysdeps/unix/sysv/linux/powerpc/chown.c: Likewise.
> 	* sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list (chown):
> 	Likewise.
>
The powerpc part is ok, checked on powerpc32-fpu.

Patch
diff mbox

diff --git a/sysdeps/unix/sysv/linux/arm/fchown.c b/sysdeps/unix/sysv/linux/arm/fchown.c
deleted file mode 100644
index 3a69ecc..0000000
--- a/sysdeps/unix/sysv/linux/arm/fchown.c
+++ /dev/null
@@ -1 +0,0 @@ 
-#include <sysdeps/unix/sysv/linux/i386/fchown.c>
diff --git a/sysdeps/unix/sysv/linux/arm/lchown.c b/sysdeps/unix/sysv/linux/arm/lchown.c
deleted file mode 100644
index c89de99..0000000
--- a/sysdeps/unix/sysv/linux/arm/lchown.c
+++ /dev/null
@@ -1 +0,0 @@ 
-#include <sysdeps/unix/sysv/linux/i386/lchown.c>
diff --git a/sysdeps/unix/sysv/linux/arm/syscalls.list b/sysdeps/unix/sysv/linux/arm/syscalls.list
index ba8cdd7..f2133bc 100644
--- a/sysdeps/unix/sysv/linux/arm/syscalls.list
+++ b/sysdeps/unix/sysv/linux/arm/syscalls.list
@@ -1,6 +1,8 @@ 
 # File name	Caller	Syscall name	# args	Strong name	Weak names
 
 chown		-	chown32		i:sii	__chown		chown
+lchown		-	lchown32	i:sii	__lchown	lchown
+fchown		-	fchown32	i:iii	__fchown	fchown
 
 prlimit64	EXTRA	prlimit64	i:iipp	prlimit64
 
diff --git a/sysdeps/unix/sysv/linux/i386/chown.c b/sysdeps/unix/sysv/linux/i386/chown.c
index 4f63b2c..b46b80e 100644
--- a/sysdeps/unix/sysv/linux/i386/chown.c
+++ b/sysdeps/unix/sysv/linux/i386/chown.c
@@ -36,16 +36,6 @@ 
 
 extern int __chown_is_lchown (const char *__file, uid_t __owner,
 			      gid_t __group);
-extern int __real_chown (const char *__file, uid_t __owner, gid_t __group);
-
-
-/* Consider moving to syscalls.list.  */
-
-int
-__real_chown (const char *file, uid_t owner, gid_t group)
-{
-  return INLINE_SYSCALL (chown32, 3, file, owner, group);
-}
 
 
 #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
@@ -61,7 +51,3 @@  __chown_is_lchown (const char *file, uid_t owner, gid_t group)
 #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
 compat_symbol (libc, __chown_is_lchown, chown, GLIBC_2_0);
 #endif
-
-versioned_symbol (libc, __real_chown, chown, GLIBC_2_1);
-strong_alias (__real_chown, __chown)
-libc_hidden_def (__chown)
diff --git a/sysdeps/unix/sysv/linux/i386/fchown.c b/sysdeps/unix/sysv/linux/i386/fchown.c
deleted file mode 100644
index 7fbfd93..0000000
--- a/sysdeps/unix/sysv/linux/i386/fchown.c
+++ /dev/null
@@ -1,34 +0,0 @@ 
-/* Copyright (C) 2000-2014 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
-   <http://www.gnu.org/licenses/>.  */
-
-#include <errno.h>
-#include <unistd.h>
-
-#include <sysdep.h>
-#include <sys/syscall.h>
-
-#include <linux/posix_types.h>
-
-/* Consider moving to syscalls.list.  */
-
-int
-__fchown (int fd, uid_t owner, gid_t group)
-{
-  return INLINE_SYSCALL (fchown32, 3, fd, owner, group);
-}
-
-weak_alias (__fchown, fchown)
diff --git a/sysdeps/unix/sysv/linux/i386/lchown.c b/sysdeps/unix/sysv/linux/i386/lchown.c
deleted file mode 100644
index cfa7e97..0000000
--- a/sysdeps/unix/sysv/linux/i386/lchown.c
+++ /dev/null
@@ -1,34 +0,0 @@ 
-/* Copyright (C) 2000-2014 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
-   <http://www.gnu.org/licenses/>.  */
-
-#include <errno.h>
-#include <unistd.h>
-
-#include <sysdep.h>
-#include <sys/syscall.h>
-
-#include <linux/posix_types.h>
-
-/* Consider moving to syscalls.list.  */
-
-int
-__lchown (const char *file, uid_t owner, gid_t group)
-{
-  return INLINE_SYSCALL (lchown32, 3, file, owner, group);
-}
-
-weak_alias (__lchown, lchown)
diff --git a/sysdeps/unix/sysv/linux/i386/syscalls.list b/sysdeps/unix/sysv/linux/i386/syscalls.list
index 8d94828..bcd9d74 100644
--- a/sysdeps/unix/sysv/linux/i386/syscalls.list
+++ b/sysdeps/unix/sysv/linux/i386/syscalls.list
@@ -1,5 +1,9 @@ 
 # File name	Caller	Syscall name	Args	Strong name	Weak names
 
+newchown	EXTRA	chown32		i:sii	__chown		chown@@GLIBC_2.1
+lchown		-	lchown32	i:sii	__lchown	lchown
+fchown		-	fchown32	i:iii	__fchown	fchown
+
 modify_ldt	EXTRA	modify_ldt	i:ipi	__modify_ldt	modify_ldt
 vm86old		EXTRA	vm86old		i:p	__vm86old	vm86@GLIBC_2.0
 vm86		-	vm86		i:ip	__vm86		vm86@@GLIBC_2.3.4
diff --git a/sysdeps/unix/sysv/linux/m68k/fchown.c b/sysdeps/unix/sysv/linux/m68k/fchown.c
deleted file mode 100644
index 3a69ecc..0000000
--- a/sysdeps/unix/sysv/linux/m68k/fchown.c
+++ /dev/null
@@ -1 +0,0 @@ 
-#include <sysdeps/unix/sysv/linux/i386/fchown.c>
diff --git a/sysdeps/unix/sysv/linux/m68k/lchown.c b/sysdeps/unix/sysv/linux/m68k/lchown.c
deleted file mode 100644
index c89de99..0000000
--- a/sysdeps/unix/sysv/linux/m68k/lchown.c
+++ /dev/null
@@ -1 +0,0 @@ 
-#include <sysdeps/unix/sysv/linux/i386/lchown.c>
diff --git a/sysdeps/unix/sysv/linux/m68k/syscalls.list b/sysdeps/unix/sysv/linux/m68k/syscalls.list
index aee1011..7896b87 100644
--- a/sysdeps/unix/sysv/linux/m68k/syscalls.list
+++ b/sysdeps/unix/sysv/linux/m68k/syscalls.list
@@ -1,6 +1,8 @@ 
 # File name	Caller	Syscall name	Args	Strong name	Weak names
 
 chown		-	chown32		i:sii	__chown		chown
+lchown		-	lchown32	i:sii	__lchown	lchown
+fchown		-	fchown32	i:iii	__fchown	fchown
 waitpid		-	waitpid		Ci:ipi	__waitpid	waitpid	__libc_waitpid
 
 cacheflush	EXTRA	cacheflush	i:iiii	__cacheflush	cacheflush
diff --git a/sysdeps/unix/sysv/linux/powerpc/chown.c b/sysdeps/unix/sysv/linux/powerpc/chown.c
deleted file mode 100644
index 59c6147..0000000
--- a/sysdeps/unix/sysv/linux/powerpc/chown.c
+++ /dev/null
@@ -1,43 +0,0 @@ 
-/* chown() compatibility.
-   Copyright (C) 1998-2014 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
-   <http://www.gnu.org/licenses/>.  */
-
-#include <errno.h>
-#include <string.h>
-#include <unistd.h>
-#include <limits.h>
-#include <sysdep.h>
-#include <stdlib.h>
-
-/* Consider moving to syscalls.list.  */
-
-/*
-  In Linux 2.1.x the chown functions have been changed.  A new function lchown
-  was introduced.  The new chown now follows symlinks - the old chown and the
-  new lchown do not follow symlinks.
-  This file emulates chown() under the old kernels.
-*/
-
-int
-__chown (const char *file, uid_t owner, gid_t group)
-{
-  return INLINE_SYSCALL (chown, 3, file, owner, group);
-}
-libc_hidden_def (__chown)
-
-#include <shlib-compat.h>
-versioned_symbol (libc, __chown, chown, GLIBC_2_1);
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list b/sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list
index fb6535a..25487cc 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list
@@ -1,5 +1,7 @@ 
 # File name	Caller	Syscall name	# args	Strong name	Weak names
 
+chown		-	chown		i:sii	__chown		chown@@GLIBC_2.1
+
 # System calls with wrappers.
 oldgetrlimit	EXTRA	getrlimit	i:ip	__old_getrlimit	getrlimit@GLIBC_2.0
 oldsetrlimit	EXTRA	setrlimit	i:ip	__old_setrlimit	setrlimit@GLIBC_2.0
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/Versions b/sysdeps/unix/sysv/linux/s390/s390-32/Versions
index 24e0b1d4..1c120e8 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/Versions
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/Versions
@@ -4,6 +4,9 @@  libc {
     __register_frame; __register_frame_table; __deregister_frame;
     __frame_state_for; __register_frame_info_table;
   }
+  GLIBC_2.1 {
+    __chown;
+  }
   GLIBC_2.2 {
     # functions used in other libraries
     __xstat64; __fxstat64; __lxstat64;
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/chown.c b/sysdeps/unix/sysv/linux/s390/s390-32/chown.c
index 1fee84a..d1e3aa4 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/chown.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/chown.c
@@ -36,14 +36,6 @@ 
 
 /* Running under Linux > 2.1.80.  */
 
-/* Consider moving to syscalls.list.  */
-
-int
-__real_chown (const char *file, uid_t owner, gid_t group)
-{
-  return INLINE_SYSCALL (chown32, 3, file, owner, group);
-}
-
 
 #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
 /* Compiling for compatibility.  */
@@ -59,13 +51,4 @@  __chown_is_lchown (const char *file, uid_t owner, gid_t group)
 strong_alias (__chown_is_lchown, _chown_is_lchown)
 compat_symbol (libc, __chown_is_lchown, __chown, GLIBC_2_0);
 compat_symbol (libc, _chown_is_lchown, chown, GLIBC_2_0);
-
-strong_alias (__real_chown, _real_chown)
-versioned_symbol (libc, __real_chown, __chown, GLIBC_2_1);
-versioned_symbol (libc, _real_chown, chown, GLIBC_2_1);
-libc_hidden_ver (__real_chown, __chown)
-#else
-strong_alias (__real_chown, __chown)
-libc_hidden_def (__chown)
-weak_alias (__real_chown, chown)
 #endif
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/fchown.c b/sysdeps/unix/sysv/linux/s390/s390-32/fchown.c
deleted file mode 100644
index 3a69ecc..0000000
--- a/sysdeps/unix/sysv/linux/s390/s390-32/fchown.c
+++ /dev/null
@@ -1 +0,0 @@ 
-#include <sysdeps/unix/sysv/linux/i386/fchown.c>
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/lchown.c b/sysdeps/unix/sysv/linux/s390/s390-32/lchown.c
deleted file mode 100644
index cfa7e97..0000000
--- a/sysdeps/unix/sysv/linux/s390/s390-32/lchown.c
+++ /dev/null
@@ -1,34 +0,0 @@ 
-/* Copyright (C) 2000-2014 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
-   <http://www.gnu.org/licenses/>.  */
-
-#include <errno.h>
-#include <unistd.h>
-
-#include <sysdep.h>
-#include <sys/syscall.h>
-
-#include <linux/posix_types.h>
-
-/* Consider moving to syscalls.list.  */
-
-int
-__lchown (const char *file, uid_t owner, gid_t group)
-{
-  return INLINE_SYSCALL (lchown32, 3, file, owner, group);
-}
-
-weak_alias (__lchown, lchown)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list b/sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list
index 523bd2c..3126c60 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list
@@ -1,5 +1,9 @@ 
 # File name	Caller	Syscall name	Args	Strong name	Weak names
 
+newchown	EXTRA	chown32		i:sii	__chown		chown@@GLIBC_2.1
+lchown		-	lchown32	i:sii	__lchown	lchown
+fchown		-	fchown32	i:iii	__fchown	fchown
+
 oldgetrlimit	EXTRA	getrlimit	i:ip	__old_getrlimit	getrlimit@GLIBC_2.0
 oldsetrlimit	EXTRA	setrlimit	i:ip	__old_setrlimit	setrlimit@GLIBC_2.0
 setrlimit	-	setrlimit	i:ip	__setrlimit	setrlimit@@GLIBC_2.2
diff --git a/sysdeps/unix/sysv/linux/sh/chown.c b/sysdeps/unix/sysv/linux/sh/chown.c
deleted file mode 100644
index 27be894..0000000
--- a/sysdeps/unix/sysv/linux/sh/chown.c
+++ /dev/null
@@ -1,34 +0,0 @@ 
-/* Copyright (C) 1998-2014 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
-   <http://www.gnu.org/licenses/>.  */
-
-#include <errno.h>
-#include <unistd.h>
-
-#include <sysdep.h>
-#include <sys/syscall.h>
-
-#include <linux/posix_types.h>
-
-/* Consider moving to syscalls.list.  */
-
-int
-__chown (const char *file, uid_t owner, gid_t group)
-{
-  return INLINE_SYSCALL (chown32, 3, file, owner, group);
-}
-libc_hidden_def (__chown)
-weak_alias (__chown, chown)
diff --git a/sysdeps/unix/sysv/linux/sh/fchown.c b/sysdeps/unix/sysv/linux/sh/fchown.c
deleted file mode 100644
index 3a69ecc..0000000
--- a/sysdeps/unix/sysv/linux/sh/fchown.c
+++ /dev/null
@@ -1 +0,0 @@ 
-#include <sysdeps/unix/sysv/linux/i386/fchown.c>
diff --git a/sysdeps/unix/sysv/linux/sh/lchown.c b/sysdeps/unix/sysv/linux/sh/lchown.c
deleted file mode 100644
index c89de99..0000000
--- a/sysdeps/unix/sysv/linux/sh/lchown.c
+++ /dev/null
@@ -1 +0,0 @@ 
-#include <sysdeps/unix/sysv/linux/i386/lchown.c>
diff --git a/sysdeps/unix/sysv/linux/sh/syscalls.list b/sysdeps/unix/sysv/linux/sh/syscalls.list
index faffe37..899d4e7 100644
--- a/sysdeps/unix/sysv/linux/sh/syscalls.list
+++ b/sysdeps/unix/sysv/linux/sh/syscalls.list
@@ -1,5 +1,9 @@ 
 # File name	Caller	Syscall name	# args	Strong name	Weak names
 
+chown		-	chown32		i:sii	__chown		chown
+lchown		-	lchown32	i:sii	__lchown	lchown
+fchown		-	fchown32	i:iii	__fchown	fchown
+
 waitpid		-	waitpid		Ci:ipi	__waitpid	waitpid	__libc_waitpid
 
 prlimit64	EXTRA	prlimit64	i:iipp	prlimit64
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/chown.c b/sysdeps/unix/sysv/linux/sparc/sparc32/chown.c
deleted file mode 100644
index 3741316..0000000
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/chown.c
+++ /dev/null
@@ -1 +0,0 @@ 
-#include <sysdeps/unix/sysv/linux/sh/chown.c>
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/fchown.c b/sysdeps/unix/sysv/linux/sparc/sparc32/fchown.c
deleted file mode 100644
index 3a69ecc..0000000
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/fchown.c
+++ /dev/null
@@ -1 +0,0 @@ 
-#include <sysdeps/unix/sysv/linux/i386/fchown.c>
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/lchown.c b/sysdeps/unix/sysv/linux/sparc/sparc32/lchown.c
deleted file mode 100644
index c89de99..0000000
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/lchown.c
+++ /dev/null
@@ -1 +0,0 @@ 
-#include <sysdeps/unix/sysv/linux/i386/lchown.c>
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
index 3d70185..e71a044 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list
@@ -1,5 +1,9 @@ 
 # File name	Caller	Syscall name	# args	Strong name	Weak names
 
+chown		-	chown32		i:sii	__chown		chown
+lchown		-	lchown32	i:sii	__lchown	lchown
+fchown		-	fchown32	i:iii	__fchown	fchown
+
 setrlimit	-	setrlimit	2	__setrlimit	setrlimit
 getrlimit	-	getrlimit	2	__getrlimit	getrlimit
 getresuid	-	getresuid32	3	getresuid