Message ID | 20240319214244.736981-5-shorne@gmail.com |
---|---|
State | New |
Headers | show |
Series | OpenRISC fixes for 2.39 | expand |
On 19/03/24 18:42, Stafford Horne wrote: > On OpenRISC variadic functions and regular functions have different > calling conventions so this wrapper is needed to translate. This > wrapper is copied from x86_64/x32. I don't know the build system enough > to find a cleaner way to share the code between x86_64/x32 and or1k > (maybe Implies?), so I went with the straight copy. It looks ok, the old way of cross-reference ABIs implementations only add complications. > > This fixes test failures: > > misc/tst-prctl > nptl/tst-setgetname > --- > sysdeps/unix/sysv/linux/or1k/prctl.c | 42 ++++++++++++++++++++++++++++ > 1 file changed, 42 insertions(+) > create mode 100644 sysdeps/unix/sysv/linux/or1k/prctl.c > > diff --git a/sysdeps/unix/sysv/linux/or1k/prctl.c b/sysdeps/unix/sysv/linux/or1k/prctl.c > new file mode 100644 > index 0000000000..1aa707d175 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/or1k/prctl.c > @@ -0,0 +1,42 @@ > +/* prctl - Linux specific syscall. OpenRISC version. > + Copyright (C) 2024 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> > +#include <stdarg.h> > +#include <sys/prctl.h> > + > +/* Unconditionally read all potential arguments. This may pass > + garbage values to the kernel, but avoids the need for teaching > + glibc the argument counts of individual options (including ones > + that are added to the kernel in the future). */ > + > +int > +__prctl (int option, ...) > +{ > + va_list arg; > + va_start (arg, option); > + unsigned long int arg2 = va_arg (arg, unsigned long int); > + unsigned long int arg3 = va_arg (arg, unsigned long int); > + unsigned long int arg4 = va_arg (arg, unsigned long int); > + unsigned long int arg5 = va_arg (arg, unsigned long int); > + va_end (arg); > + return INLINE_SYSCALL_CALL (prctl, option, arg2, arg3, arg4, arg5); > +} > + > +libc_hidden_def (__prctl) > +weak_alias (__prctl, prctl)
diff --git a/sysdeps/unix/sysv/linux/or1k/prctl.c b/sysdeps/unix/sysv/linux/or1k/prctl.c new file mode 100644 index 0000000000..1aa707d175 --- /dev/null +++ b/sysdeps/unix/sysv/linux/or1k/prctl.c @@ -0,0 +1,42 @@ +/* prctl - Linux specific syscall. OpenRISC version. + Copyright (C) 2024 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> +#include <stdarg.h> +#include <sys/prctl.h> + +/* Unconditionally read all potential arguments. This may pass + garbage values to the kernel, but avoids the need for teaching + glibc the argument counts of individual options (including ones + that are added to the kernel in the future). */ + +int +__prctl (int option, ...) +{ + va_list arg; + va_start (arg, option); + unsigned long int arg2 = va_arg (arg, unsigned long int); + unsigned long int arg3 = va_arg (arg, unsigned long int); + unsigned long int arg4 = va_arg (arg, unsigned long int); + unsigned long int arg5 = va_arg (arg, unsigned long int); + va_end (arg); + return INLINE_SYSCALL_CALL (prctl, option, arg2, arg3, arg4, arg5); +} + +libc_hidden_def (__prctl) +weak_alias (__prctl, prctl)