linux: Remove assembly umount2 implementation

Only alpha and ia64 do not support __NR_umount2 (defined as
__NR_umount), but recent kernel fixes (74cd2184833f for ia64, and
12b57c5c70f39 for alpha) add the required alias.

Checked with a build against all affected ABIs.

Reviewed-by: Florian Weimer <fweimer@redhat.com>
This commit is contained in:
Adhemerval Zanella 2020-05-08 09:30:18 -03:00
parent 9f6bd1f605
commit e1b871e25f
5 changed files with 63 additions and 20 deletions

View File

@ -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:

View File

@ -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 */

View File

@ -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);

View File

@ -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

View File

@ -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)