summary refs log tree commit diff
path: root/sysdeps/unix
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2020-06-26 09:29:11 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2021-11-30 13:13:03 -0300
commitefc6b2dbc47231dee7a7ac39beec808deb4e4d1f (patch)
treef5686babdb8325e2bbe9a41e36e0f9c26006c095 /sysdeps/unix
parent5b3e31e3124bf89710e5c25176c70fdf66c2a212 (diff)
downloadglibc-efc6b2dbc47231dee7a7ac39beec808deb4e4d1f.tar.gz
glibc-efc6b2dbc47231dee7a7ac39beec808deb4e4d1f.tar.xz
glibc-efc6b2dbc47231dee7a7ac39beec808deb4e4d1f.zip
linux: Implement pipe in terms of __NR_pipe2
The syscall pipe2 was added in linux 2.6.27 and glibc requires linux
3.2.0.  The patch removes the arch-specific implementation for alpha,
ia64, mips, sh, and sparc which requires a different kernel ABI
than the usual one.

Checked on x86_64-linux-gnu and with a build for the affected ABIs.
Diffstat (limited to 'sysdeps/unix')
-rw-r--r--sysdeps/unix/alpha/pipe.S30
-rw-r--r--sysdeps/unix/mips/pipe.S31
-rw-r--r--sysdeps/unix/sysv/linux/alpha/pipe.S1
-rw-r--r--sysdeps/unix/sysv/linux/ia64/pipe.S36
-rw-r--r--sysdeps/unix/sysv/linux/mips/pipe.S1
-rw-r--r--sysdeps/unix/sysv/linux/pipe.c (renamed from sysdeps/unix/sysv/linux/generic/pipe.c)5
-rw-r--r--sysdeps/unix/sysv/linux/sh/pipe.S42
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/pipe.S38
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S39
-rw-r--r--sysdeps/unix/sysv/linux/syscalls.list1
10 files changed, 3 insertions, 221 deletions
diff --git a/sysdeps/unix/alpha/pipe.S b/sysdeps/unix/alpha/pipe.S
deleted file mode 100644
index 45944535cd..0000000000
--- a/sysdeps/unix/alpha/pipe.S
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Copyright (C) 1993-2021 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/>.  */
-
-/* __pipe is a special syscall since it returns two values.  */
-
-#include <sysdep.h>
-
-PSEUDO (__pipe, pipe, 0)
-	stl	r0, 0(a0)
-	stl	r1, 4(a0)
-	mov	zero, v0
-	ret
-PSEUDO_END(__pipe)
-
-libc_hidden_def (__pipe)
-weak_alias (__pipe, pipe)
diff --git a/sysdeps/unix/mips/pipe.S b/sysdeps/unix/mips/pipe.S
deleted file mode 100644
index 6fbea01d44..0000000000
--- a/sysdeps/unix/mips/pipe.S
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (C) 1992-2021 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>
-
-SYSCALL__ (pipe, 1)
-	/* Plop in the two descriptors.  */
-	sw v0, 0(a0)
-	sw v1, 4(a0)
-
-	/* Go out with a clean status.  */
-	move v0, zero
-	j ra
-PSEUDO_END(__pipe)
-
-libc_hidden_def (__pipe)
-weak_alias (__pipe, pipe)
diff --git a/sysdeps/unix/sysv/linux/alpha/pipe.S b/sysdeps/unix/sysv/linux/alpha/pipe.S
deleted file mode 100644
index 1e7ec1c199..0000000000
--- a/sysdeps/unix/sysv/linux/alpha/pipe.S
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/unix/alpha/pipe.S>
diff --git a/sysdeps/unix/sysv/linux/ia64/pipe.S b/sysdeps/unix/sysv/linux/ia64/pipe.S
deleted file mode 100644
index ffda712920..0000000000
--- a/sysdeps/unix/sysv/linux/ia64/pipe.S
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright (C) 1999-2021 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/>.  */
-
-/* __pipe is a special syscall since it returns two values.  */
-
-#include <sysdep.h>
-
-ENTRY(__pipe)
-       .regstk 1,0,0,0
-       DO_CALL (SYS_ify (pipe))
-       cmp.ne p6,p0=-1,r10
-       ;;
-(p6)   st4 [in0]=r8,4
-(p6)   mov ret0=0
-       ;;
-(p6)   st4 [in0]=r9
-(p6)   ret
-       br.cond.spnt.few __syscall_error
-PSEUDO_END(__pipe)
-
-libc_hidden_def (__pipe)
-weak_alias (__pipe, pipe)
diff --git a/sysdeps/unix/sysv/linux/mips/pipe.S b/sysdeps/unix/sysv/linux/mips/pipe.S
deleted file mode 100644
index 1708888da4..0000000000
--- a/sysdeps/unix/sysv/linux/mips/pipe.S
+++ /dev/null
@@ -1 +0,0 @@
-#include <sysdeps/unix/mips/pipe.S>
diff --git a/sysdeps/unix/sysv/linux/generic/pipe.c b/sysdeps/unix/sysv/linux/pipe.c
index a73a4e89fc..c873bed11a 100644
--- a/sysdeps/unix/sysv/linux/generic/pipe.c
+++ b/sysdeps/unix/sysv/linux/pipe.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 2011-2021 Free Software Foundation, Inc.
+/* Create create pipe.  Linux generic version.
+   Copyright (C) 2021 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
@@ -25,7 +26,7 @@
 int
 __pipe (int __pipedes[2])
 {
-  return INLINE_SYSCALL (pipe2, 2, __pipedes, 0);
+  return INLINE_SYSCALL_CALL (pipe2, (int *) __pipedes, 0);
 }
 libc_hidden_def (__pipe)
 weak_alias (__pipe, pipe)
diff --git a/sysdeps/unix/sysv/linux/sh/pipe.S b/sysdeps/unix/sysv/linux/sh/pipe.S
deleted file mode 100644
index 0f3eb16588..0000000000
--- a/sysdeps/unix/sysv/linux/sh/pipe.S
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Copyright (C) 1999-2021 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>
-
-ENTRY (__libc_pipe)
-	mov	#+__NR_pipe, r3
-	trapa	#0x10
-	mov     r0, r3
-	mov	#-12, r2
-	shad	r2, r3
-	not	r3, r3			// r1=0 means r0 = -1 to -4095
-	tst	r3, r3			// i.e. error in linux
-	bt	1f
-	mov.l	r0, @r4
-	mov.l	r1, @(4, r4)
-	rts
-	 mov	#0, r0
-1:
-	SYSCALL_ERROR_HANDLER
-.Lpseudo_end:
-	rts
-	 nop
-PSEUDO_END (__libc_pipe)
-
-weak_alias (__libc_pipe, __pipe)
-libc_hidden_def (__pipe)
-weak_alias (__libc_pipe, pipe)
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/pipe.S b/sysdeps/unix/sysv/linux/sparc/sparc32/pipe.S
deleted file mode 100644
index 0fa155fa61..0000000000
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/pipe.S
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (C) 1997-2021 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>
-
-	.text
-	.globl		__syscall_error
-ENTRY(__libc_pipe)
-        mov	%o0, %o2            /* Save PIPEDES. */
-	mov	SYS_ify(pipe),%g1
-	ta	0x10
-	bcc	1f
-	 mov	%o7, %g1
-	call	__syscall_error
-	 mov	%g1, %o7
-1:	st	%o0, [%o2]           /* PIPEDES[0] = %o0; */
-        st	%o1, [%o2 + 4]       /* PIPEDES[1] = %o1; */
-	retl
-	 clr	%o0
-END(__libc_pipe)
-
-weak_alias (__libc_pipe, __pipe)
-libc_hidden_def (__pipe)
-weak_alias (__libc_pipe, pipe)
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S b/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S
deleted file mode 100644
index da6ea71729..0000000000
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright (C) 1997-2021 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>
-
-	.text
-
-	.globl	__syscall_error
-ENTRY(__libc_pipe)
-	mov	%o0, %o2		/* Save PIPEDES. */
-	LOADSYSCALL(pipe)
-	ta	0x6d
-	bcc,pt	%xcc, 1f
-	 mov	%o7, %g1
-	call	__syscall_error
-	 mov	%g1, %o7
-1:	st	%o0, [%o2]		/* PIPEDES[0] = %o0; */
-	st	%o1, [%o2 + 4]		/* PIPEDES[1] = %o1; */
-	retl
-	 clr	%o0
-END(__libc_pipe)
-
-weak_alias (__libc_pipe, __pipe)
-libc_hidden_def (__pipe)
-weak_alias (__libc_pipe, pipe)
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index e7d7b025fc..c93c0d8193 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -38,7 +38,6 @@ mount		EXTRA	mount		i:sssUp	__mount	mount
 munlock		-	munlock		i:aU	munlock
 munlockall	-	munlockall	i:	munlockall
 nfsservctl	EXTRA	nfsservctl	i:ipp	__compat_nfsservctl	nfsservctl@GLIBC_2.0:GLIBC_2.28
-pipe		-	pipe		i:f	__pipe		pipe
 pipe2		-	pipe2		i:fi	__pipe2		pipe2
 pivot_root	EXTRA	pivot_root	i:ss	pivot_root
 query_module	EXTRA	query_module	i:sipip	__compat_query_module	query_module@GLIBC_2.0:GLIBC_2.23