mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-14 13:00:20 +00: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:
parent
5b3e31e312
commit
efc6b2dbc4
@ -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.
|
||||
|
||||
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)
|
@ -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
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user