[7/8] socket: Add time64 alias for getsockopt
Checks
Context |
Check |
Description |
dj/TryBot-apply_patch |
success
|
Patch applied to master at the time it was sent
|
Commit Message
---
socket/Makefile | 9 +++-
socket/sys/socket.h | 15 ++++++
socket/tst-sockopt-time64.c | 1 +
socket/tst-sockopt.c | 52 +++++++++++++++++++
sysdeps/unix/sysv/linux/Versions | 1 +
sysdeps/unix/sysv/linux/arm/be/libc.abilist | 1 +
sysdeps/unix/sysv/linux/arm/le/libc.abilist | 1 +
sysdeps/unix/sysv/linux/csky/libc.abilist | 1 +
sysdeps/unix/sysv/linux/getsockopt.c | 3 ++
sysdeps/unix/sysv/linux/hppa/libc.abilist | 1 +
sysdeps/unix/sysv/linux/i386/libc.abilist | 1 +
.../sysv/linux/m68k/coldfire/libc.abilist | 1 +
.../unix/sysv/linux/m68k/m680x0/libc.abilist | 1 +
.../sysv/linux/microblaze/be/libc.abilist | 1 +
.../sysv/linux/microblaze/le/libc.abilist | 1 +
.../sysv/linux/mips/mips32/fpu/libc.abilist | 1 +
.../sysv/linux/mips/mips32/nofpu/libc.abilist | 1 +
.../sysv/linux/mips/mips64/n32/libc.abilist | 1 +
sysdeps/unix/sysv/linux/nios2/libc.abilist | 1 +
.../linux/powerpc/powerpc32/fpu/libc.abilist | 1 +
.../powerpc/powerpc32/nofpu/libc.abilist | 1 +
.../unix/sysv/linux/s390/s390-32/libc.abilist | 1 +
sysdeps/unix/sysv/linux/sh/be/libc.abilist | 1 +
sysdeps/unix/sysv/linux/sh/le/libc.abilist | 1 +
.../sysv/linux/sparc/sparc32/libc.abilist | 1 +
25 files changed, 99 insertions(+), 1 deletion(-)
create mode 100644 socket/tst-sockopt-time64.c
create mode 100644 socket/tst-sockopt.c
Comments
LGTM, thanks.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
On 19/07/2021 12:29, Florian Weimer via Libc-alpha wrote:
> ---
> socket/Makefile | 9 +++-
> socket/sys/socket.h | 15 ++++++
> socket/tst-sockopt-time64.c | 1 +
> socket/tst-sockopt.c | 52 +++++++++++++++++++
> sysdeps/unix/sysv/linux/Versions | 1 +
> sysdeps/unix/sysv/linux/arm/be/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/arm/le/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/csky/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/getsockopt.c | 3 ++
> sysdeps/unix/sysv/linux/hppa/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/i386/libc.abilist | 1 +
> .../sysv/linux/m68k/coldfire/libc.abilist | 1 +
> .../unix/sysv/linux/m68k/m680x0/libc.abilist | 1 +
> .../sysv/linux/microblaze/be/libc.abilist | 1 +
> .../sysv/linux/microblaze/le/libc.abilist | 1 +
> .../sysv/linux/mips/mips32/fpu/libc.abilist | 1 +
> .../sysv/linux/mips/mips32/nofpu/libc.abilist | 1 +
> .../sysv/linux/mips/mips64/n32/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/nios2/libc.abilist | 1 +
> .../linux/powerpc/powerpc32/fpu/libc.abilist | 1 +
> .../powerpc/powerpc32/nofpu/libc.abilist | 1 +
> .../unix/sysv/linux/s390/s390-32/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/sh/be/libc.abilist | 1 +
> sysdeps/unix/sysv/linux/sh/le/libc.abilist | 1 +
> .../sysv/linux/sparc/sparc32/libc.abilist | 1 +
> 25 files changed, 99 insertions(+), 1 deletion(-)
> create mode 100644 socket/tst-sockopt-time64.c
> create mode 100644 socket/tst-sockopt.c
>
> diff --git a/socket/Makefile b/socket/Makefile
> index 27ffe44c05..3759576010 100644
> --- a/socket/Makefile
> +++ b/socket/Makefile
> @@ -31,7 +31,14 @@ routines := accept bind connect getpeername getsockname getsockopt \
> setsockopt shutdown socket socketpair isfdtype opensock \
> sockatmark accept4 recvmmsg sendmmsg
>
> -tests := tst-accept4
> +tests := \
> + tst-accept4 \
> + tst-sockopt \
> + # tests
> +
> +tests-time64 := \
> + tst-sockopt-time64 \
> + # tests
>
> aux := sa_len
>
Ok.
> diff --git a/socket/sys/socket.h b/socket/sys/socket.h
> index e779dc837f..b37c87e7df 100644
> --- a/socket/sys/socket.h
> +++ b/socket/sys/socket.h
> @@ -251,9 +251,24 @@ extern int __REDIRECT (recvmmsg, (int __fd, struct mmsghdr *__vmessages,
> /* Put the current value for socket FD's option OPTNAME at protocol level LEVEL
> into OPTVAL (which is *OPTLEN bytes long), and set *OPTLEN to the value's
> actual length. Returns 0 on success, -1 for errors. */
> +#ifndef __USE_TIME_BITS64
> extern int getsockopt (int __fd, int __level, int __optname,
> void *__restrict __optval,
> socklen_t *__restrict __optlen) __THROW;
> +#else
> +# ifdef __REDIRECT
> +extern int __REDIRECT_NTH (getsockopt,
> + (int __fd, int __level, int __optname,
> + void *__restrict __optval,
> + socklen_t *__restrict __optlen),
> + __getsockopt64);
> +# else
> +extern int __getsockopt64 (int __fd, int __level, int __optname,
> + void *__restrict __optval,
> + socklen_t *__restrict __optlen) __THROW;
> +# define getsockopt __getsockopt64
> +# endif
> +#endif
>
> /* Set socket FD's option OPTNAME at protocol level LEVEL
> to *OPTVAL (which is OPTLEN bytes long).
Ok.
> diff --git a/socket/tst-sockopt-time64.c b/socket/tst-sockopt-time64.c
> new file mode 100644
> index 0000000000..f1df48de73
> --- /dev/null
> +++ b/socket/tst-sockopt-time64.c
> @@ -0,0 +1 @@
> +#include "tst-sockopt.c"
> diff --git a/socket/tst-sockopt.c b/socket/tst-sockopt.c
> new file mode 100644
> index 0000000000..f3ce0bc3a4
> --- /dev/null
> +++ b/socket/tst-sockopt.c
> @@ -0,0 +1,52 @@
> +/* Smoke test for socket options.
> + 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
> + 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 <support/xsocket.h>
> +#include <support/xunistd.h>
> +#include <support/check.h>
> +#include <netinet/in.h>
> +
> +static int
> +do_test (void)
> +{
> + int fd = xsocket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
> +
> + struct linger value = { -1, -1 };
> + socklen_t optlen = sizeof (value);
> + TEST_COMPARE (getsockopt (fd, SOL_SOCKET, SO_LINGER, &value, &optlen), 0);
> + TEST_COMPARE (optlen, sizeof (value));
> + TEST_COMPARE (value.l_onoff, 0);
> + TEST_COMPARE (value.l_linger, 0);
> +
> + value.l_onoff = 1;
> + value.l_linger = 30;
> + TEST_COMPARE (setsockopt (fd, SOL_SOCKET, SO_LINGER, &value, sizeof (value)),
> + 0);
> +
> + value.l_onoff = -1;
> + value.l_linger = -1;
> + TEST_COMPARE (getsockopt (fd, SOL_SOCKET, SO_LINGER, &value, &optlen), 0);
> + TEST_COMPARE (optlen, sizeof (value));
> + TEST_COMPARE (value.l_onoff, 1);
> + TEST_COMPARE (value.l_linger, 30);
> +
> + xclose (fd);
> + return 0;
> +}
> +
> +#include <support/test-driver.c>
Ok.
> diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
> index e03ebf9aff..5ff450f476 100644
> --- a/sysdeps/unix/sysv/linux/Versions
> +++ b/sysdeps/unix/sysv/linux/Versions
> @@ -225,6 +225,7 @@ libc {
> __gai_suspend_time64;
> __getitimer64;
> __getrusage64;
> + __getsockopt64;
> __gettimeofday64;
> __glob64_time64;
> __globfree64_time64;
Ok.
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index c3c96f24c4..cb5615f428 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -218,6 +218,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index 2786afa406..88c3db4560 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -215,6 +215,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index da3f538b40..e90ad23a66 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -2374,6 +2374,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
> diff --git a/sysdeps/unix/sysv/linux/getsockopt.c b/sysdeps/unix/sysv/linux/getsockopt.c
> index f86b06dec6..57343d432c 100644
> --- a/sysdeps/unix/sysv/linux/getsockopt.c
> +++ b/sysdeps/unix/sysv/linux/getsockopt.c
> @@ -101,3 +101,6 @@ __getsockopt (int fd, int level, int optname, void *optval, socklen_t *len)
> return r;
> }
> weak_alias (__getsockopt, getsockopt)
> +#if __TIMESIZE != 64
> +weak_alias (__getsockopt, __getsockopt64)
> +#endif
Ok.
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index 47d376ff62..ea727e1956 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -2325,6 +2325,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index d6b038b6a3..f53a44f7ca 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -2508,6 +2508,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index ab9e0955dd..c86910563a 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -219,6 +219,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index 479d17be35..c7fe3b31e7 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -2452,6 +2452,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index 90302842f5..3c8ed8d962 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -2425,6 +2425,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index dcfd52ec31..cc3a28054d 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -2422,6 +2422,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index c72c2a7101..49bc91ab6a 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -2417,6 +2417,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index 6725735b59..853a61f3db 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -2415,6 +2415,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index 5c2e228628..28917895bd 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -2423,6 +2423,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> index e0ffbb5687..e4d4ea4d26 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> @@ -2464,6 +2464,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index 105dda5300..22b7f8604d 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -2479,6 +2479,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index b079847f84..8b49bcfe32 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -2512,6 +2512,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index b3b55c9c68..97939a88ee 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -2477,6 +2477,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index 54174a2263..a56b7ddd00 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -2332,6 +2332,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index 3028f6c334..c043e9b58f 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -2329,6 +2329,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index 8b0ae536e2..ebd2acd9e4 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -2472,6 +2472,7 @@ GLIBC_2.34 __futimesat64 F
> GLIBC_2.34 __gai_suspend_time64 F
> GLIBC_2.34 __getitimer64 F
> GLIBC_2.34 __getrusage64 F
> +GLIBC_2.34 __getsockopt64 F
> GLIBC_2.34 __gettimeofday64 F
> GLIBC_2.34 __glob64_time64 F
> GLIBC_2.34 __globfree64_time64 F
>
@@ -31,7 +31,14 @@ routines := accept bind connect getpeername getsockname getsockopt \
setsockopt shutdown socket socketpair isfdtype opensock \
sockatmark accept4 recvmmsg sendmmsg
-tests := tst-accept4
+tests := \
+ tst-accept4 \
+ tst-sockopt \
+ # tests
+
+tests-time64 := \
+ tst-sockopt-time64 \
+ # tests
aux := sa_len
@@ -251,9 +251,24 @@ extern int __REDIRECT (recvmmsg, (int __fd, struct mmsghdr *__vmessages,
/* Put the current value for socket FD's option OPTNAME at protocol level LEVEL
into OPTVAL (which is *OPTLEN bytes long), and set *OPTLEN to the value's
actual length. Returns 0 on success, -1 for errors. */
+#ifndef __USE_TIME_BITS64
extern int getsockopt (int __fd, int __level, int __optname,
void *__restrict __optval,
socklen_t *__restrict __optlen) __THROW;
+#else
+# ifdef __REDIRECT
+extern int __REDIRECT_NTH (getsockopt,
+ (int __fd, int __level, int __optname,
+ void *__restrict __optval,
+ socklen_t *__restrict __optlen),
+ __getsockopt64);
+# else
+extern int __getsockopt64 (int __fd, int __level, int __optname,
+ void *__restrict __optval,
+ socklen_t *__restrict __optlen) __THROW;
+# define getsockopt __getsockopt64
+# endif
+#endif
/* Set socket FD's option OPTNAME at protocol level LEVEL
to *OPTVAL (which is OPTLEN bytes long).
new file mode 100644
@@ -0,0 +1 @@
+#include "tst-sockopt.c"
new file mode 100644
@@ -0,0 +1,52 @@
+/* Smoke test for socket options.
+ 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
+ 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 <support/xsocket.h>
+#include <support/xunistd.h>
+#include <support/check.h>
+#include <netinet/in.h>
+
+static int
+do_test (void)
+{
+ int fd = xsocket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
+
+ struct linger value = { -1, -1 };
+ socklen_t optlen = sizeof (value);
+ TEST_COMPARE (getsockopt (fd, SOL_SOCKET, SO_LINGER, &value, &optlen), 0);
+ TEST_COMPARE (optlen, sizeof (value));
+ TEST_COMPARE (value.l_onoff, 0);
+ TEST_COMPARE (value.l_linger, 0);
+
+ value.l_onoff = 1;
+ value.l_linger = 30;
+ TEST_COMPARE (setsockopt (fd, SOL_SOCKET, SO_LINGER, &value, sizeof (value)),
+ 0);
+
+ value.l_onoff = -1;
+ value.l_linger = -1;
+ TEST_COMPARE (getsockopt (fd, SOL_SOCKET, SO_LINGER, &value, &optlen), 0);
+ TEST_COMPARE (optlen, sizeof (value));
+ TEST_COMPARE (value.l_onoff, 1);
+ TEST_COMPARE (value.l_linger, 30);
+
+ xclose (fd);
+ return 0;
+}
+
+#include <support/test-driver.c>
@@ -225,6 +225,7 @@ libc {
__gai_suspend_time64;
__getitimer64;
__getrusage64;
+ __getsockopt64;
__gettimeofday64;
__glob64_time64;
__globfree64_time64;
@@ -218,6 +218,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
@@ -215,6 +215,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
@@ -2374,6 +2374,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
@@ -101,3 +101,6 @@ __getsockopt (int fd, int level, int optname, void *optval, socklen_t *len)
return r;
}
weak_alias (__getsockopt, getsockopt)
+#if __TIMESIZE != 64
+weak_alias (__getsockopt, __getsockopt64)
+#endif
@@ -2325,6 +2325,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
@@ -2508,6 +2508,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
@@ -219,6 +219,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
@@ -2452,6 +2452,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
@@ -2425,6 +2425,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
@@ -2422,6 +2422,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
@@ -2417,6 +2417,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
@@ -2415,6 +2415,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
@@ -2423,6 +2423,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
@@ -2464,6 +2464,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
@@ -2479,6 +2479,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
@@ -2512,6 +2512,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
@@ -2477,6 +2477,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
@@ -2332,6 +2332,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
@@ -2329,6 +2329,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
@@ -2472,6 +2472,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F