Move some *at definitions to syscalls.list (bug 14138)

Message ID Pine.LNX.4.64.1409292315590.31344@digraph.polyomino.org.uk
State Committed
Headers

Commit Message

Joseph Myers Sept. 29, 2014, 11:16 p.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 definitions of various *at functions in
sysdeps/unix/sysv/linux/.

These particular moves are straightforward: there are no #includes of
these source files, no special architecture-specific versions, no
special symbol version handling and no aliases.  Each source file can
be replaced by a single line in sysdeps/unix/sysv/linux/syscalls.list.

Tested for x86_64.

(This patch is independent of my other pending patches for such moves,
<https://sourceware.org/ml/libc-alpha/2014-09/msg00546.html> and
<https://sourceware.org/ml/libc-alpha/2014-09/msg00559.html>.)

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

	[BZ #14138]
	* sysdeps/unix/sysv/linux/syscalls.list (fchownat): New syscall.
	(linkat): Likewise.
	(mkdirat): Likewise.
	(readlinkat): Likewise.
	(renameat): Likewise.
	(symlinkat): Likewise.
	(unlinkat): Likewise.
	* sysdeps/unix/sysv/linux/fchownat.c: Remove file.
	* sysdeps/unix/sysv/linux/linkat.c: Likewise.
	* sysdeps/unix/sysv/linux/mkdirat.c: Likewise.
	* sysdeps/unix/sysv/linux/readlinkat.c: Likewise.
	* sysdeps/unix/sysv/linux/renameat.c: Likewise.
	* sysdeps/unix/sysv/linux/symlinkat.c: Likewise.
	* sysdeps/unix/sysv/linux/unlinkat.c: Likewise.
  

Comments

Will Newton Sept. 30, 2014, 7:53 a.m. UTC | #1
On 30 September 2014 00:16, Joseph S. Myers <joseph@codesourcery.com> wrote:
> 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 definitions of various *at functions in
> sysdeps/unix/sysv/linux/.
>
> These particular moves are straightforward: there are no #includes of
> these source files, no special architecture-specific versions, no
> special symbol version handling and no aliases.  Each source file can
> be replaced by a single line in sysdeps/unix/sysv/linux/syscalls.list.
>
> Tested for x86_64.
>
> (This patch is independent of my other pending patches for such moves,
> <https://sourceware.org/ml/libc-alpha/2014-09/msg00546.html> and
> <https://sourceware.org/ml/libc-alpha/2014-09/msg00559.html>.)
>
> 2014-09-29  Joseph Myers  <joseph@codesourcery.com>
>
>         [BZ #14138]
>         * sysdeps/unix/sysv/linux/syscalls.list (fchownat): New syscall.
>         (linkat): Likewise.
>         (mkdirat): Likewise.
>         (readlinkat): Likewise.
>         (renameat): Likewise.
>         (symlinkat): Likewise.
>         (unlinkat): Likewise.
>         * sysdeps/unix/sysv/linux/fchownat.c: Remove file.
>         * sysdeps/unix/sysv/linux/linkat.c: Likewise.
>         * sysdeps/unix/sysv/linux/mkdirat.c: Likewise.
>         * sysdeps/unix/sysv/linux/readlinkat.c: Likewise.
>         * sysdeps/unix/sysv/linux/renameat.c: Likewise.
>         * sysdeps/unix/sysv/linux/symlinkat.c: Likewise.
>         * sysdeps/unix/sysv/linux/unlinkat.c: Likewise.

This looks ok to me.

> diff --git a/sysdeps/unix/sysv/linux/fchownat.c b/sysdeps/unix/sysv/linux/fchownat.c
> deleted file mode 100644
> index fae1256..0000000
> --- a/sysdeps/unix/sysv/linux/fchownat.c
> +++ /dev/null
> @@ -1,41 +0,0 @@
> -/* Copyright (C) 2005-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 <fcntl.h>
> -#include <stddef.h>
> -#include <stdio.h>
> -#include <string.h>
> -#include <unistd.h>
> -#include <sys/types.h>
> -#include <alloca.h>
> -#include <sysdep.h>
> -
> -
> -/* Consider moving to syscalls.list.  */
> -
> -/* Change the owner and group of FILE.  */
> -int
> -fchownat (fd, file, owner, group, flag)
> -     int fd;
> -     const char *file;
> -     uid_t owner;
> -     gid_t group;
> -     int flag;
> -{
> -  return INLINE_SYSCALL (fchownat, 5, fd, file, owner, group, flag);
> -}
> diff --git a/sysdeps/unix/sysv/linux/linkat.c b/sysdeps/unix/sysv/linux/linkat.c
> deleted file mode 100644
> index e150486..0000000
> --- a/sysdeps/unix/sysv/linux/linkat.c
> +++ /dev/null
> @@ -1,39 +0,0 @@
> -/* Copyright (C) 2005-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 <fcntl.h>
> -#include <string.h>
> -#include <stdio.h>
> -#include <sysdep.h>
> -#include <unistd.h>
> -
> -
> -/* Consider moving to syscalls.list.  */
> -
> -/* Make a link to FROM named TO but relative paths in TO and FROM are
> -   interpreted relative to FROMFD and TOFD respectively.  */
> -int
> -linkat (fromfd, from, tofd, to, flags)
> -     int fromfd;
> -     const char *from;
> -     int tofd;
> -     const char *to;
> -     int flags;
> -{
> -  return INLINE_SYSCALL (linkat, 5, fromfd, from, tofd, to, flags);
> -}
> diff --git a/sysdeps/unix/sysv/linux/mkdirat.c b/sysdeps/unix/sysv/linux/mkdirat.c
> deleted file mode 100644
> index 9de1058..0000000
> --- a/sysdeps/unix/sysv/linux/mkdirat.c
> +++ /dev/null
> @@ -1,38 +0,0 @@
> -/* Copyright (C) 2005-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 <fcntl.h>
> -#include <stddef.h>
> -#include <stdio.h>
> -#include <string.h>
> -#include <sys/stat.h>
> -#include <sysdep-cancel.h>
> -
> -
> -/* Consider moving to syscalls.list.  */
> -
> -/* Create a new directory with permission bits MODE.  But interpret
> -   relative PATH names relative to the directory associated with FD.  */
> -int
> -mkdirat (fd, file, mode)
> -     int fd;
> -     const char *file;
> -     mode_t mode;
> -{
> -  return INLINE_SYSCALL (mkdirat, 3, fd, file, mode);
> -}
> diff --git a/sysdeps/unix/sysv/linux/readlinkat.c b/sysdeps/unix/sysv/linux/readlinkat.c
> deleted file mode 100644
> index 8755fc8..0000000
> --- a/sysdeps/unix/sysv/linux/readlinkat.c
> +++ /dev/null
> @@ -1,41 +0,0 @@
> -/* Copyright (C) 2005-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 <fcntl.h>
> -#include <stddef.h>
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <string.h>
> -#include <sysdep.h>
> -#include <unistd.h>
> -
> -
> -/* Consider moving to syscalls.list.  */
> -
> -/* Read the contents of the symbolic link PATH relative to FD into no
> -   more than LEN bytes of BUF.  */
> -ssize_t
> -readlinkat (fd, path, buf, len)
> -     int fd;
> -     const char *path;
> -     char *buf;
> -     size_t len;
> -{
> -  return INLINE_SYSCALL (readlinkat, 4, fd, path, buf, len);
> -}
> -libc_hidden_def (readlinkat)
> diff --git a/sysdeps/unix/sysv/linux/renameat.c b/sysdeps/unix/sysv/linux/renameat.c
> deleted file mode 100644
> index 6f2e148..0000000
> --- a/sysdeps/unix/sysv/linux/renameat.c
> +++ /dev/null
> @@ -1,36 +0,0 @@
> -/* Copyright (C) 2005-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 <fcntl.h>
> -#include <stdio.h>
> -#include <string.h>
> -#include <sysdep.h>
> -
> -
> -/* Consider moving to syscalls.list.  */
> -
> -/* Rename the file OLD relative to OLDFD to NEW relative to NEWFD.  */
> -int
> -renameat (oldfd, old, newfd, new)
> -     int oldfd;
> -     const char *old;
> -     int newfd;
> -     const char *new;
> -{
> -  return INLINE_SYSCALL (renameat, 4, oldfd, old, newfd, new);
> -}
> diff --git a/sysdeps/unix/sysv/linux/symlinkat.c b/sysdeps/unix/sysv/linux/symlinkat.c
> deleted file mode 100644
> index 1166525..0000000
> --- a/sysdeps/unix/sysv/linux/symlinkat.c
> +++ /dev/null
> @@ -1,38 +0,0 @@
> -/* Copyright (C) 2005-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 <fcntl.h>
> -#include <stddef.h>
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <string.h>
> -#include <sysdep.h>
> -#include <unistd.h>
> -
> -
> -/* Consider moving to syscalls.list.  */
> -
> -/* Make a symbolic link to FROM named TO relative to TOFD.  */
> -int
> -symlinkat (from, tofd, to)
> -     const char *from;
> -     int tofd;
> -     const char *to;
> -{
> -  return INLINE_SYSCALL (symlinkat, 3, from, tofd, to);
> -}
> diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
> index d639d63..5e3968a 100644
> --- a/sysdeps/unix/sysv/linux/syscalls.list
> +++ b/sysdeps/unix/sysv/linux/syscalls.list
> @@ -84,6 +84,14 @@ wait4                -       wait4           i:iWiP  __wait4         wait4
>
>  chown          -       chown           i:sii   __libc_chown    __chown chown
>
> +fchownat       -       fchownat        i:isiii fchownat
> +linkat         -       linkat          i:isisi linkat
> +mkdirat                -       mkdirat         i:isi   mkdirat
> +readlinkat     -       readlinkat      i:issi  readlinkat
> +renameat       -       renameat        i:isis  renameat
> +symlinkat      -       symlinkat       i:sis   symlinkat
> +unlinkat       -       unlinkat        i:isi   unlinkat
> +
>  setxattr       -       setxattr        i:sspii setxattr
>  lsetxattr      -       lsetxattr       i:sspii lsetxattr
>  fsetxattr      -       fsetxattr       i:ispii fsetxattr
> diff --git a/sysdeps/unix/sysv/linux/unlinkat.c b/sysdeps/unix/sysv/linux/unlinkat.c
> deleted file mode 100644
> index 2d5bd74..0000000
> --- a/sysdeps/unix/sysv/linux/unlinkat.c
> +++ /dev/null
> @@ -1,39 +0,0 @@
> -/* unlinkat -- Remove a link by relative name.
> -   Copyright (C) 2005-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 <fcntl.h>
> -#include <stddef.h>
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <string.h>
> -#include <sysdep.h>
> -#include <unistd.h>
> -
> -
> -/* Consider moving to syscalls.list.  */
> -
> -/* Remove the link named NAME.  */
> -int
> -unlinkat (fd, file, flag)
> -     int fd;
> -     const char *file;
> -     int flag;
> -{
> -  return INLINE_SYSCALL (unlinkat, 3, fd, file, flag);
> -}
>
> --
> Joseph S. Myers
> joseph@codesourcery.com
  
Rich Felker Sept. 30, 2014, 5:03 p.m. UTC | #2
On Mon, Sep 29, 2014 at 11:16:32PM +0000, Joseph S. Myers wrote:
> 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 definitions of various *at functions in
> sysdeps/unix/sysv/linux/.

I think this is premature. Some of these functions, especially
fchmodat, have serious bug reports open against them which cannot be
fixed if they're pure syscall wrappers. See:

https://sourceware.org/bugzilla/show_bug.cgi?id=14578

Rich
  
Joseph Myers Sept. 30, 2014, 5:24 p.m. UTC | #3
On Tue, 30 Sep 2014, Rich Felker wrote:

> On Mon, Sep 29, 2014 at 11:16:32PM +0000, Joseph S. Myers wrote:
> > 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 definitions of various *at functions in
> > sysdeps/unix/sysv/linux/.
> 
> I think this is premature. Some of these functions, especially
> fchmodat, have serious bug reports open against them which cannot be
> fixed if they're pure syscall wrappers. See:
> 
> https://sourceware.org/bugzilla/show_bug.cgi?id=14578

My patch did not change fchmodat because the implementation isn't simply a 
syscall wrapper (the C function has an extra argument).  For anything 
that's currently a syscall wrapper in glibc, there is no point in it being 
a C wrapper rather than a syscalls.list entry simply because some future 
change might require such a wrapper; it can be converted to C at the point 
where a C implementation is needed.
  
Rich Felker Sept. 30, 2014, 5:25 p.m. UTC | #4
On Tue, Sep 30, 2014 at 05:24:10PM +0000, Joseph S. Myers wrote:
> On Tue, 30 Sep 2014, Rich Felker wrote:
> 
> > On Mon, Sep 29, 2014 at 11:16:32PM +0000, Joseph S. Myers wrote:
> > > 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 definitions of various *at functions in
> > > sysdeps/unix/sysv/linux/.
> > 
> > I think this is premature. Some of these functions, especially
> > fchmodat, have serious bug reports open against them which cannot be
> > fixed if they're pure syscall wrappers. See:
> > 
> > https://sourceware.org/bugzilla/show_bug.cgi?id=14578
> 
> My patch did not change fchmodat because the implementation isn't simply a 
> syscall wrapper (the C function has an extra argument).  For anything 
> that's currently a syscall wrapper in glibc, there is no point in it being 
> a C wrapper rather than a syscalls.list entry simply because some future 
> change might require such a wrapper; it can be converted to C at the point 
> where a C implementation is needed.

Sounds ok then.

Rich
  

Patch

diff --git a/sysdeps/unix/sysv/linux/fchownat.c b/sysdeps/unix/sysv/linux/fchownat.c
deleted file mode 100644
index fae1256..0000000
--- a/sysdeps/unix/sysv/linux/fchownat.c
+++ /dev/null
@@ -1,41 +0,0 @@ 
-/* Copyright (C) 2005-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 <fcntl.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <alloca.h>
-#include <sysdep.h>
-
-
-/* Consider moving to syscalls.list.  */
-
-/* Change the owner and group of FILE.  */
-int
-fchownat (fd, file, owner, group, flag)
-     int fd;
-     const char *file;
-     uid_t owner;
-     gid_t group;
-     int flag;
-{
-  return INLINE_SYSCALL (fchownat, 5, fd, file, owner, group, flag);
-}
diff --git a/sysdeps/unix/sysv/linux/linkat.c b/sysdeps/unix/sysv/linux/linkat.c
deleted file mode 100644
index e150486..0000000
--- a/sysdeps/unix/sysv/linux/linkat.c
+++ /dev/null
@@ -1,39 +0,0 @@ 
-/* Copyright (C) 2005-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 <fcntl.h>
-#include <string.h>
-#include <stdio.h>
-#include <sysdep.h>
-#include <unistd.h>
-
-
-/* Consider moving to syscalls.list.  */
-
-/* Make a link to FROM named TO but relative paths in TO and FROM are
-   interpreted relative to FROMFD and TOFD respectively.  */
-int
-linkat (fromfd, from, tofd, to, flags)
-     int fromfd;
-     const char *from;
-     int tofd;
-     const char *to;
-     int flags;
-{
-  return INLINE_SYSCALL (linkat, 5, fromfd, from, tofd, to, flags);
-}
diff --git a/sysdeps/unix/sysv/linux/mkdirat.c b/sysdeps/unix/sysv/linux/mkdirat.c
deleted file mode 100644
index 9de1058..0000000
--- a/sysdeps/unix/sysv/linux/mkdirat.c
+++ /dev/null
@@ -1,38 +0,0 @@ 
-/* Copyright (C) 2005-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 <fcntl.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sysdep-cancel.h>
-
-
-/* Consider moving to syscalls.list.  */
-
-/* Create a new directory with permission bits MODE.  But interpret
-   relative PATH names relative to the directory associated with FD.  */
-int
-mkdirat (fd, file, mode)
-     int fd;
-     const char *file;
-     mode_t mode;
-{
-  return INLINE_SYSCALL (mkdirat, 3, fd, file, mode);
-}
diff --git a/sysdeps/unix/sysv/linux/readlinkat.c b/sysdeps/unix/sysv/linux/readlinkat.c
deleted file mode 100644
index 8755fc8..0000000
--- a/sysdeps/unix/sysv/linux/readlinkat.c
+++ /dev/null
@@ -1,41 +0,0 @@ 
-/* Copyright (C) 2005-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 <fcntl.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sysdep.h>
-#include <unistd.h>
-
-
-/* Consider moving to syscalls.list.  */
-
-/* Read the contents of the symbolic link PATH relative to FD into no
-   more than LEN bytes of BUF.  */
-ssize_t
-readlinkat (fd, path, buf, len)
-     int fd;
-     const char *path;
-     char *buf;
-     size_t len;
-{
-  return INLINE_SYSCALL (readlinkat, 4, fd, path, buf, len);
-}
-libc_hidden_def (readlinkat)
diff --git a/sysdeps/unix/sysv/linux/renameat.c b/sysdeps/unix/sysv/linux/renameat.c
deleted file mode 100644
index 6f2e148..0000000
--- a/sysdeps/unix/sysv/linux/renameat.c
+++ /dev/null
@@ -1,36 +0,0 @@ 
-/* Copyright (C) 2005-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 <fcntl.h>
-#include <stdio.h>
-#include <string.h>
-#include <sysdep.h>
-
-
-/* Consider moving to syscalls.list.  */
-
-/* Rename the file OLD relative to OLDFD to NEW relative to NEWFD.  */
-int
-renameat (oldfd, old, newfd, new)
-     int oldfd;
-     const char *old;
-     int newfd;
-     const char *new;
-{
-  return INLINE_SYSCALL (renameat, 4, oldfd, old, newfd, new);
-}
diff --git a/sysdeps/unix/sysv/linux/symlinkat.c b/sysdeps/unix/sysv/linux/symlinkat.c
deleted file mode 100644
index 1166525..0000000
--- a/sysdeps/unix/sysv/linux/symlinkat.c
+++ /dev/null
@@ -1,38 +0,0 @@ 
-/* Copyright (C) 2005-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 <fcntl.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sysdep.h>
-#include <unistd.h>
-
-
-/* Consider moving to syscalls.list.  */
-
-/* Make a symbolic link to FROM named TO relative to TOFD.  */
-int
-symlinkat (from, tofd, to)
-     const char *from;
-     int tofd;
-     const char *to;
-{
-  return INLINE_SYSCALL (symlinkat, 3, from, tofd, to);
-}
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index d639d63..5e3968a 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -84,6 +84,14 @@  wait4		-	wait4		i:iWiP	__wait4		wait4
 
 chown		-	chown		i:sii	__libc_chown	__chown chown
 
+fchownat	-	fchownat	i:isiii	fchownat
+linkat		-	linkat		i:isisi	linkat
+mkdirat		-	mkdirat		i:isi	mkdirat
+readlinkat	-	readlinkat	i:issi	readlinkat
+renameat	-	renameat	i:isis	renameat
+symlinkat	-	symlinkat	i:sis	symlinkat
+unlinkat	-	unlinkat	i:isi	unlinkat
+
 setxattr	-	setxattr	i:sspii	setxattr
 lsetxattr	-	lsetxattr	i:sspii	lsetxattr
 fsetxattr	-	fsetxattr	i:ispii	fsetxattr
diff --git a/sysdeps/unix/sysv/linux/unlinkat.c b/sysdeps/unix/sysv/linux/unlinkat.c
deleted file mode 100644
index 2d5bd74..0000000
--- a/sysdeps/unix/sysv/linux/unlinkat.c
+++ /dev/null
@@ -1,39 +0,0 @@ 
-/* unlinkat -- Remove a link by relative name.
-   Copyright (C) 2005-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 <fcntl.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sysdep.h>
-#include <unistd.h>
-
-
-/* Consider moving to syscalls.list.  */
-
-/* Remove the link named NAME.  */
-int
-unlinkat (fd, file, flag)
-     int fd;
-     const char *file;
-     int flag;
-{
-  return INLINE_SYSCALL (unlinkat, 3, fd, file, flag);
-}