[v2,1/1] inet: add support for 64-bit network byte order
Checks
Commit Message
From: Philip Prindeville <philipp@redfish-solutions.com>
As 32-bit machines become increasingly supplanted by 64-bit
architectures, network protocols likewise leverage those
larger word capabilities. A good example is POSIX supporting
64-bit time_t's to avoid the 2038 problem, or timestamps that
include micro- or nanosecond precision.
Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com>
---
NEWS | 6 ++++
inet/Makefile | 1 +
inet/htonll.c | 35 +++++++++++++++++++
inet/htontest.c | 11 ++++++
inet/netinet/in.h | 18 ++++++++++
inet/test-hnto-types.c | 4 +++
manual/socket.texi | 13 +++++++
sysdeps/mach/hurd/i386/libc.abilist | 2 ++
sysdeps/mach/hurd/x86_64/libc.abilist | 2 ++
sysdeps/unix/sysv/linux/aarch64/libc.abilist | 2 ++
sysdeps/unix/sysv/linux/alpha/libc.abilist | 2 ++
sysdeps/unix/sysv/linux/arc/libc.abilist | 2 ++
sysdeps/unix/sysv/linux/arm/be/libc.abilist | 2 ++
sysdeps/unix/sysv/linux/arm/le/libc.abilist | 2 ++
sysdeps/unix/sysv/linux/csky/libc.abilist | 2 ++
sysdeps/unix/sysv/linux/hppa/libc.abilist | 2 ++
sysdeps/unix/sysv/linux/i386/libc.abilist | 2 ++
.../sysv/linux/loongarch/lp64/libc.abilist | 2 ++
.../sysv/linux/m68k/coldfire/libc.abilist | 2 ++
.../unix/sysv/linux/m68k/m680x0/libc.abilist | 2 ++
.../sysv/linux/microblaze/be/libc.abilist | 2 ++
.../sysv/linux/microblaze/le/libc.abilist | 2 ++
.../sysv/linux/mips/mips32/fpu/libc.abilist | 2 ++
.../sysv/linux/mips/mips32/nofpu/libc.abilist | 2 ++
.../sysv/linux/mips/mips64/n32/libc.abilist | 2 ++
.../sysv/linux/mips/mips64/n64/libc.abilist | 2 ++
sysdeps/unix/sysv/linux/or1k/libc.abilist | 2 ++
.../linux/powerpc/powerpc32/fpu/libc.abilist | 2 ++
.../powerpc/powerpc32/nofpu/libc.abilist | 2 ++
.../linux/powerpc/powerpc64/be/libc.abilist | 2 ++
.../linux/powerpc/powerpc64/le/libc.abilist | 2 ++
.../unix/sysv/linux/riscv/rv32/libc.abilist | 2 ++
.../unix/sysv/linux/riscv/rv64/libc.abilist | 2 ++
.../unix/sysv/linux/s390/s390-32/libc.abilist | 2 ++
.../unix/sysv/linux/s390/s390-64/libc.abilist | 2 ++
sysdeps/unix/sysv/linux/sh/be/libc.abilist | 2 ++
sysdeps/unix/sysv/linux/sh/le/libc.abilist | 2 ++
.../sysv/linux/sparc/sparc32/libc.abilist | 2 ++
.../sysv/linux/sparc/sparc64/libc.abilist | 2 ++
.../unix/sysv/linux/x86_64/64/libc.abilist | 2 ++
.../unix/sysv/linux/x86_64/x32/libc.abilist | 2 ++
41 files changed, 156 insertions(+)
Comments
On Mon, 10 Mar 2025, Philip Prindeville wrote:
> As 32-bit machines become increasingly supplanted by 64-bit
> architectures, network protocols likewise leverage those
> larger word capabilities. A good example is POSIX supporting
> 64-bit time_t's to avoid the 2038 problem, or timestamps that
> include micro- or nanosecond precision.
I still think it's a bad idea to add such new interfaces that just
duplicate interfaces we already have under better names that are
standardized in POSIX.1-2024.
> On Mar 11, 2025, at 12:20 PM, Joseph Myers <josmyers@redhat.com> wrote:
>
> On Mon, 10 Mar 2025, Philip Prindeville wrote:
>
>> As 32-bit machines become increasingly supplanted by 64-bit
>> architectures, network protocols likewise leverage those
>> larger word capabilities. A good example is POSIX supporting
>> 64-bit time_t's to avoid the 2038 problem, or timestamps that
>> include micro- or nanosecond precision.
>
> I still think it's a bad idea to add such new interfaces that just
> duplicate interfaces we already have under better names that are
> standardized in POSIX.1-2024.
>
Y’all know where I was going to go with this next, right?
Yup, standardized marshaling for float and double…
On Tue, 11 Mar 2025, Philip Prindeville wrote:
> Y’all know where I was going to go with this next, right?
>
> Yup, standardized marshaling for float and double…
You can use printf with %a to output those as hex float strings.
Alternatively, C23 Annex H defines encodefN / decodefN functions that can
be used with _Float32 / _Float64 (and that follow __STDC_ENDIAN_NATIVE__,
so you'd then need to do endian conversion; endian-aware loads / stores
didn't get into the C standard before C2Y, but you could of course combine
encodefN / decodefN with interfaces such as htobe64; encodefN / decodefN
use unsigned char arrays, so you can cast a pointer to an integer and the
aliasing is OK). Since _Float32 and _Float64 are defined to follow the
semantics of IEEE interchange formats, they are semantically preferable to
float and double for this - just as uint64_t is preferable to unsigned
long long for such purposes (both in the types used in the interfaces, and
in the naming where "64" is preferable to "ll").
* Joseph Myers:
> On Tue, 11 Mar 2025, Philip Prindeville wrote:
>
>> Y’all know where I was going to go with this next, right?
>>
>> Yup, standardized marshaling for float and double…
>
> You can use printf with %a to output those as hex float strings.
>
> Alternatively, C23 Annex H defines encodefN / decodefN functions that can
> be used with _Float32 / _Float64 (and that follow __STDC_ENDIAN_NATIVE__,
> so you'd then need to do endian conversion; endian-aware loads / stores
> didn't get into the C standard before C2Y, but you could of course combine
> encodefN / decodefN with interfaces such as htobe64; encodefN / decodefN
> use unsigned char arrays, so you can cast a pointer to an integer and the
> aliasing is OK). Since _Float32 and _Float64 are defined to follow the
> semantics of IEEE interchange formats, they are semantically preferable to
> float and double for this - just as uint64_t is preferable to unsigned
> long long for such purposes (both in the types used in the interfaces, and
> in the naming where "64" is preferable to "ll").
Do any of these interfaces cover the mixed endian doubles that some
32-bit Arm ABIs use? Or are all of these obsolete/not supported by
glibc?
Thanks,
Florian
On Tue, 11 Mar 2025, Florian Weimer wrote:
> > Alternatively, C23 Annex H defines encodefN / decodefN functions that can
> > be used with _Float32 / _Float64 (and that follow __STDC_ENDIAN_NATIVE__,
> > so you'd then need to do endian conversion; endian-aware loads / stores
> > didn't get into the C standard before C2Y, but you could of course combine
> > encodefN / decodefN with interfaces such as htobe64; encodefN / decodefN
> > use unsigned char arrays, so you can cast a pointer to an integer and the
> > aliasing is OK). Since _Float32 and _Float64 are defined to follow the
> > semantics of IEEE interchange formats, they are semantically preferable to
> > float and double for this - just as uint64_t is preferable to unsigned
> > long long for such purposes (both in the types used in the interfaces, and
> > in the naming where "64" is preferable to "ll").
>
> Do any of these interfaces cover the mixed endian doubles that some
> 32-bit Arm ABIs use? Or are all of these obsolete/not supported by
> glibc?
glibc doesn't support any configurations with mixed-endian doubles. I
removed OABI support from Arm glibc in 2012, and support for FPA floating
point was also removed from GCC in 2012.
> On Mar 11, 2025, at 1:00 PM, Joseph Myers <josmyers@redhat.com> wrote:
>
> On Tue, 11 Mar 2025, Philip Prindeville wrote:
>
>> Y’all know where I was going to go with this next, right?
>>
>> Yup, standardized marshaling for float and double…
>
> You can use printf with %a to output those as hex float strings.
>
> Alternatively, C23 Annex H defines encodefN / decodefN functions that can
> be used with _Float32 / _Float64 (and that follow __STDC_ENDIAN_NATIVE__,
> so you'd then need to do endian conversion; endian-aware loads / stores
> didn't get into the C standard before C2Y, but you could of course combine
> encodefN / decodefN with interfaces such as htobe64; encodefN / decodefN
> use unsigned char arrays, so you can cast a pointer to an integer and the
> aliasing is OK). Since _Float32 and _Float64 are defined to follow the
> semantics of IEEE interchange formats, they are semantically preferable to
> float and double for this - just as uint64_t is preferable to unsigned
> long long for such purposes (both in the types used in the interfaces, and
> in the naming where "64" is preferable to "ll").
>
> --
> Joseph S. Myers
> josmyers@redhat.com
Got any example of code that does this that I could study?
Thanks
On Tue, 11 Mar 2025, Philip Prindeville wrote:
> > Alternatively, C23 Annex H defines encodefN / decodefN functions that can
> > be used with _Float32 / _Float64 (and that follow __STDC_ENDIAN_NATIVE__,
> > so you'd then need to do endian conversion; endian-aware loads / stores
> > didn't get into the C standard before C2Y, but you could of course combine
> > encodefN / decodefN with interfaces such as htobe64; encodefN / decodefN
> > use unsigned char arrays, so you can cast a pointer to an integer and the
> > aliasing is OK). Since _Float32 and _Float64 are defined to follow the
> > semantics of IEEE interchange formats, they are semantically preferable to
> > float and double for this - just as uint64_t is preferable to unsigned
> > long long for such purposes (both in the types used in the interfaces, and
> > in the naming where "64" is preferable to "ll").
> >
> > --
> > Joseph S. Myers
> > josmyers@redhat.com
>
>
>
> Got any example of code that does this that I could study?
I don't have specific examples, but the fact the reasonably specified
standard interfaces already exist is evidence against inventing something
different. (And glibc doesn't yet support encodefN / decodefN interfaces,
but the implementation would more or less just be memcpy, since all
supported configurations have the same endianness for integers and
floating-point types.)
@@ -36,6 +36,12 @@ The following bugs were resolved with this release:
[The release manager will add the list generated by
scripts/list-fixed-bugs.py just before the release.]
+
+GNU extensions added:
+
+ Introduced htonll() and ntohll() functions for marshalling 64-bit
+ quantities into big-endian order for network transmission.
+
Version 2.41
@@ -51,6 +51,7 @@ routines := \
herrno \
herrno-loc \
htonl \
+ htonll \
htons \
idna \
idna_name_classify \
new file mode 100644
@@ -0,0 +1,35 @@
+/* Copyright (C) 2025 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 <stdint.h>
+#include <netinet/in.h>
+
+#undef htonll
+#undef ntohll
+
+uint64_t
+htonll (uint64_t x)
+{
+#if BYTE_ORDER == BIG_ENDIAN
+ return x;
+#elif BYTE_ORDER == LITTLE_ENDIAN
+ return __bswap_64 (x);
+#else
+# error "What kind of system is this?"
+#endif
+}
+weak_alias (htonll, ntohll)
@@ -37,6 +37,7 @@
# error "Bah, what kind of system do you use?"
#endif
+uint64_t lots = 0xefcdab8967452301;
uint32_t lo = 0x67452301;
uint16_t foo = 0x1234;
@@ -45,6 +46,16 @@ main (void)
{
int result = 0;
+ TEST (0xefcdab8967452301, 0x0123456789abcdef, htonll);
+ TEST (0xefcdab8967452301, 0x0123456789abcdef, (htonll));
+ TEST (0xefcdab8967452301, 0x0123456789abcdef, ntohll);
+ TEST (0xefcdab8967452301, 0x0123456789abcdef, (ntohll));
+
+ TEST (lots, 0x0123456789abcdef, htonl);
+ TEST (lots, 0x0123456789abcdef, (htonl));
+ TEST (lots, 0x0123456789abcdef, ntohl);
+ TEST (lots, 0x0123456789abcdef, (ntohl));
+
TEST (0x67452301, 0x01234567, htonl);
TEST (0x67452301, 0x01234567, (htonl));
TEST (0x67452301, 0x01234567, ntohl);
@@ -406,6 +406,12 @@ extern uint32_t htonl (uint32_t __hostlong)
extern uint16_t htons (uint16_t __hostshort)
__THROW __attribute__ ((__const__));
+#ifdef __USE_GNU
+extern uint64_t ntohll (uint64_t __netlonglong) __THROW __attribute__ ((__const__));
+extern uint64_t htonll (uint64_t __hostlonglong)
+ __THROW __attribute__ ((__const__));
+#endif
+
#include <endian.h>
/* Get machine dependent optimized versions of byte swapping functions. */
@@ -419,14 +425,26 @@ extern uint16_t htons (uint16_t __hostshort)
# if __BYTE_ORDER == __BIG_ENDIAN
/* The host byte order is the same as network byte order,
so these functions are all just identity. */
+# ifdef __USE_GNU
+# define ntohll(x) __uint64_identity (x)
+# endif
# define ntohl(x) __uint32_identity (x)
# define ntohs(x) __uint16_identity (x)
+# ifdef __USE_GNU
+# define htonll(x) __uint64_identity (x)
+# endif
# define htonl(x) __uint32_identity (x)
# define htons(x) __uint16_identity (x)
# else
# if __BYTE_ORDER == __LITTLE_ENDIAN
+# ifdef __USE_GNU
+# define ntohll(x) __bswap_64 (x)
+# endif
# define ntohl(x) __bswap_32 (x)
# define ntohs(x) __bswap_16 (x)
+# ifdef __USE_GNU
+# define htonll(x) __bswap_64 (x)
+# endif
# define htonl(x) __bswap_32 (x)
# define htons(x) __bswap_16 (x)
# endif
@@ -22,6 +22,7 @@
int i;
uint16_t u16;
uint32_t u32;
+uint64_t u64;
int
do_test (void)
@@ -31,8 +32,11 @@ do_test (void)
extern __typeof (ntohs (i)) u16;
extern __typeof (htonl (i)) u32;
extern __typeof (ntohl (i)) u32;
+ extern __typeof (htonll (i)) u64;
+ extern __typeof (ntohll (i)) u64;
(void) u16;
(void) u32;
+ (void) u64;
return 0;
}
@@ -1957,6 +1957,13 @@ host byte order to network byte order.
This is used for IPv4 Internet addresses.
@end deftypefun
+@deftypefun {uint64_t} htonll (uint64_t @var{hostlonglong})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c htonll ok
+@c bswap_64 dup ok
+This function converts the @code{uint64_t} integer @var{hostlonglong} from
+host byte order to network byte order.
+
@deftypefun {uint32_t} ntohl (uint32_t @var{netlong})
@standards{BSD, netinet/in.h}
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
@@ -1967,6 +1974,12 @@ network byte order to host byte order.
This is used for IPv4 Internet addresses.
@end deftypefun
+@deftypefun {uint64_t} ntohll (uint64_t @var{netlonglong})
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+@c Alias to htonll.
+This function converts the @code{uint64_t} integer @var{netlonglong} from
+network byte order to host byte order.
+
@node Protocols Database
@subsection Protocols Database
@cindex protocols database
@@ -2668,6 +2668,8 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F
HURD_CTHREADS_0.3 __cthread_getspecific F
HURD_CTHREADS_0.3 __cthread_keycreate F
HURD_CTHREADS_0.3 __cthread_setspecific F
@@ -2295,6 +2295,8 @@ GLIBC_2.42 pthread_rwlockattr_destroy F
GLIBC_2.42 pthread_rwlockattr_getpshared F
GLIBC_2.42 pthread_rwlockattr_init F
GLIBC_2.42 pthread_rwlockattr_setpshared F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F
HURD_CTHREADS_0.3 __cthread_getspecific F
HURD_CTHREADS_0.3 __cthread_keycreate F
HURD_CTHREADS_0.3 __cthread_setspecific F
@@ -2750,3 +2750,5 @@ GLIBC_2.39 stdc_trailing_zeros_ull F
GLIBC_2.39 stdc_trailing_zeros_us F
GLIBC_2.41 sched_getattr F
GLIBC_2.41 sched_setattr F
+GLIBC_2.43 htonll F
+GLIBC_2.43 ntohll F
@@ -3187,3 +3187,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.43 htonll F
+GLIBC_2.43 ntohll F
@@ -2511,3 +2511,5 @@ GLIBC_2.39 stdc_trailing_zeros_ull F
GLIBC_2.39 stdc_trailing_zeros_us F
GLIBC_2.41 sched_getattr F
GLIBC_2.41 sched_setattr F
+GLIBC_2.43 htonll F
+GLIBC_2.43 ntohll F
@@ -2876,3 +2876,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F
@@ -2873,3 +2873,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F
@@ -2787,3 +2787,5 @@ GLIBC_2.39 stdc_trailing_zeros_ull F
GLIBC_2.39 stdc_trailing_zeros_us F
GLIBC_2.41 sched_getattr F
GLIBC_2.41 sched_setattr F
+GLIBC_2.43 htonll F
+GLIBC_2.43 ntohll F
@@ -2896,3 +2896,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.43 htonll F
+GLIBC_2.43 ntohll F
@@ -3079,3 +3079,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.43 htonll F
+GLIBC_2.43 ntohll F
@@ -2271,3 +2271,5 @@ GLIBC_2.39 stdc_trailing_zeros_ull F
GLIBC_2.39 stdc_trailing_zeros_us F
GLIBC_2.41 sched_getattr F
GLIBC_2.41 sched_setattr F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F
@@ -2855,3 +2855,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F
@@ -3022,3 +3022,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F
@@ -2836,3 +2836,5 @@ GLIBC_2.39 stdc_trailing_zeros_ull F
GLIBC_2.39 stdc_trailing_zeros_us F
GLIBC_2.41 sched_getattr F
GLIBC_2.41 sched_setattr F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F
@@ -2833,3 +2833,5 @@ GLIBC_2.39 stdc_trailing_zeros_ull F
GLIBC_2.39 stdc_trailing_zeros_us F
GLIBC_2.41 sched_getattr F
GLIBC_2.41 sched_setattr F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F
@@ -2983,3 +2983,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.43 htonll F
+GLIBC_2.43 ntohll F
@@ -2981,3 +2981,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.43 htonll F
+GLIBC_2.43 ntohll F
@@ -2989,3 +2989,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.43 htonll F
+GLIBC_2.43 ntohll F
@@ -2891,3 +2891,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.43 htonll F
+GLIBC_2.43 ntohll F
@@ -2261,3 +2261,5 @@ GLIBC_2.40 setcontext F
GLIBC_2.40 swapcontext F
GLIBC_2.41 sched_getattr F
GLIBC_2.41 sched_setattr F
+GLIBC_2.43 htonll F
+GLIBC_2.43 ntohll F
@@ -3232,3 +3232,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.43 htonll F
+GLIBC_2.43 ntohll F
@@ -3277,3 +3277,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.43 htonll F
+GLIBC_2.43 ntohll F
@@ -2986,3 +2986,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.43 htonll F
+GLIBC_2.43 ntohll F
@@ -2970,3 +2970,5 @@ GLIBC_2.39 stdc_trailing_zeros_ull F
GLIBC_2.39 stdc_trailing_zeros_us F
GLIBC_2.41 sched_getattr F
GLIBC_2.41 sched_setattr F
+GLIBC_2.43 htonll F
+GLIBC_2.43 ntohll F
@@ -2514,3 +2514,5 @@ GLIBC_2.39 stdc_trailing_zeros_us F
GLIBC_2.40 __riscv_hwprobe F
GLIBC_2.41 sched_getattr F
GLIBC_2.41 sched_setattr F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F
@@ -2714,3 +2714,5 @@ GLIBC_2.39 stdc_trailing_zeros_us F
GLIBC_2.40 __riscv_hwprobe F
GLIBC_2.41 sched_getattr F
GLIBC_2.41 sched_setattr F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F
@@ -3244,3 +3244,5 @@ GLIBC_2.9 pututline F
GLIBC_2.9 pututxline F
GLIBC_2.9 updwtmp F
GLIBC_2.9 updwtmpx F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F
@@ -3021,3 +3021,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F
@@ -2902,3 +2902,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F
@@ -2899,3 +2899,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F
@@ -3249,3 +3249,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F
@@ -2867,3 +2867,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F
@@ -2818,3 +2818,5 @@ GLIBC_2.9 ns_name_skip F
GLIBC_2.9 ns_name_uncompress F
GLIBC_2.9 ns_name_unpack F
GLIBC_2.9 pipe2 F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F
@@ -2765,3 +2765,5 @@ GLIBC_2.39 stdc_trailing_zeros_ull F
GLIBC_2.39 stdc_trailing_zeros_us F
GLIBC_2.41 sched_getattr F
GLIBC_2.41 sched_setattr F
+GLIBC_2.42 htonll F
+GLIBC_2.42 ntohll F