mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-08 17:42:12 +03:00
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.
This commit is contained in:
@@ -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)
|
|
@@ -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)
|
|
@@ -1 +0,0 @@
|
|||||||
#include <sysdeps/unix/alpha/pipe.S>
|
|
@@ -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)
|
|
@@ -1 +0,0 @@
|
|||||||
#include <sysdeps/unix/mips/pipe.S>
|
|
@@ -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.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@@ -25,7 +26,7 @@
|
|||||||
int
|
int
|
||||||
__pipe (int __pipedes[2])
|
__pipe (int __pipedes[2])
|
||||||
{
|
{
|
||||||
return INLINE_SYSCALL (pipe2, 2, __pipedes, 0);
|
return INLINE_SYSCALL_CALL (pipe2, (int *) __pipedes, 0);
|
||||||
}
|
}
|
||||||
libc_hidden_def (__pipe)
|
libc_hidden_def (__pipe)
|
||||||
weak_alias (__pipe, pipe)
|
weak_alias (__pipe, pipe)
|
@@ -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)
|
|
@@ -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)
|
|
@@ -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)
|
|
@@ -38,7 +38,6 @@ mount EXTRA mount i:sssUp __mount mount
|
|||||||
munlock - munlock i:aU munlock
|
munlock - munlock i:aU munlock
|
||||||
munlockall - munlockall i: munlockall
|
munlockall - munlockall i: munlockall
|
||||||
nfsservctl EXTRA nfsservctl i:ipp __compat_nfsservctl nfsservctl@GLIBC_2.0:GLIBC_2.28
|
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
|
pipe2 - pipe2 i:fi __pipe2 pipe2
|
||||||
pivot_root EXTRA pivot_root i:ss pivot_root
|
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
|
query_module EXTRA query_module i:sipip __compat_query_module query_module@GLIBC_2.0:GLIBC_2.23
|
||||||
|
Reference in New Issue
Block a user