Message ID | 20200508192502.3056018-1-adhemerval.zanella@linaro.org |
---|---|
State | New |
Headers | show |
Series | [v2] linux: Remove assembly umount2 implementation | expand |
* Adhemerval Zanella via Libc-alpha: > diff --git a/sysdeps/unix/sysv/linux/include/sys/mount.h b/sysdeps/unix/sysv/linux/include/sys/mount.h > new file mode 100644 > index 0000000000..6f6122cca3 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/include/sys/mount.h > @@ -0,0 +1,31 @@ > +/* Internal declarations for sys/mount.h. > + Copyright (C) 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/>. */ > + > +#ifndef _INCLUDE_SYS_MOUNT_H > +#define _INCLUDE_SYS_MOUNT_H 1 > + > +#include_next <sys/mount.h> > + > +# ifndef _ISOMAC > + > +extern __typeof (umount) __umount __THROW; > +extern __typeof (umount2) __umount2 __THROW; > +libc_hidden_proto (__umount2) > + > +# endif /* _ISOMAC */ > +#endif /* sys/sysinfo.h */ I think we are inconsistent about the # indentation within header guards under include/, so this is fine. > diff --git a/sysdeps/unix/sysv/linux/umount.c b/sysdeps/unix/sysv/linux/umount.c > index ab6a20f596..2a75760dfa 100644 > --- a/sysdeps/unix/sysv/linux/umount.c > +++ b/sysdeps/unix/sysv/linux/umount.c > @@ -16,12 +16,10 @@ > License along with the GNU C Library. If not, see > <https://www.gnu.org/licenses/>. */ > > -/* Since the generic Linux syscall ABI doesn't have an oldumount system call, > - do what the kernel does down here. */ > +#include <sys/mount.h> > +#include <sysdep.h> > > -extern long int __umount2 (const char *name, int flags); > - > -long int > +int > __umount (const char *name) > { > return __umount2 (name, 0); The return type change is correct (and required by the newly added prototype). > diff --git a/sysdeps/unix/sysv/linux/umount2.c b/sysdeps/unix/sysv/linux/umount2.c > new file mode 100644 > index 0000000000..a91fd50733 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/umount2.c > @@ -0,0 +1,29 @@ > +/* Unmount filesystem. > + Copyright (C) 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 <sys/mount.h> > +#include <sysdep.h> > + > +int > +__umount2 (const char *special_file, int flags) > +{ > + return INLINE_SYSCALL_CALL (umount2, special_file, flags); > +} > +libc_hidden_def (__umount2) > + > +weak_alias (__umount2, umount2) Looks good. Reviewed-by: Florian Weimer <fweimer@redhat.com> Thanks, Florian
diff --git a/sysdeps/unix/sysv/linux/ia64/syscalls.list b/sysdeps/unix/sysv/linux/ia64/syscalls.list index 56f4138c43..bd39441d3c 100644 --- a/sysdeps/unix/sysv/linux/ia64/syscalls.list +++ b/sysdeps/unix/sysv/linux/ia64/syscalls.list @@ -1,7 +1,5 @@ # File name Caller Syscall name # args Strong name Weak names -umount2 - umount 2 __umount2 umount2 - getpriority - getpriority i:ii __getpriority getpriority # proper socket implementations: diff --git a/sysdeps/unix/sysv/linux/include/sys/mount.h b/sysdeps/unix/sysv/linux/include/sys/mount.h new file mode 100644 index 0000000000..6f6122cca3 --- /dev/null +++ b/sysdeps/unix/sysv/linux/include/sys/mount.h @@ -0,0 +1,31 @@ +/* Internal declarations for sys/mount.h. + Copyright (C) 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/>. */ + +#ifndef _INCLUDE_SYS_MOUNT_H +#define _INCLUDE_SYS_MOUNT_H 1 + +#include_next <sys/mount.h> + +# ifndef _ISOMAC + +extern __typeof (umount) __umount __THROW; +extern __typeof (umount2) __umount2 __THROW; +libc_hidden_proto (__umount2) + +# endif /* _ISOMAC */ +#endif /* sys/sysinfo.h */ diff --git a/sysdeps/unix/sysv/linux/umount.c b/sysdeps/unix/sysv/linux/umount.c index ab6a20f596..2a75760dfa 100644 --- a/sysdeps/unix/sysv/linux/umount.c +++ b/sysdeps/unix/sysv/linux/umount.c @@ -16,12 +16,10 @@ License along with the GNU C Library. If not, see <https://www.gnu.org/licenses/>. */ -/* Since the generic Linux syscall ABI doesn't have an oldumount system call, - do what the kernel does down here. */ +#include <sys/mount.h> +#include <sysdep.h> -extern long int __umount2 (const char *name, int flags); - -long int +int __umount (const char *name) { return __umount2 (name, 0); diff --git a/sysdeps/unix/sysv/linux/umount2.S b/sysdeps/unix/sysv/linux/umount2.S deleted file mode 100644 index 92241bbf97..0000000000 --- a/sysdeps/unix/sysv/linux/umount2.S +++ /dev/null @@ -1,13 +0,0 @@ -/* umount system call with two parameters. */ - -#include <sysdep.h> -#if defined __NR_oldumount || defined __NR_umount2 -#ifdef __NR_oldumount -PSEUDO (__umount2, umount, 2) -#else -PSEUDO (__umount2, umount2, 2) -#endif - ret -PSEUDO_END(__umount2) -weak_alias (__umount2, umount2) -#endif diff --git a/sysdeps/unix/sysv/linux/umount2.c b/sysdeps/unix/sysv/linux/umount2.c new file mode 100644 index 0000000000..a91fd50733 --- /dev/null +++ b/sysdeps/unix/sysv/linux/umount2.c @@ -0,0 +1,29 @@ +/* Unmount filesystem. + Copyright (C) 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 <sys/mount.h> +#include <sysdep.h> + +int +__umount2 (const char *special_file, int flags) +{ + return INLINE_SYSCALL_CALL (umount2, special_file, flags); +} +libc_hidden_def (__umount2) + +weak_alias (__umount2, umount2)