[v2,1/1] inet: add support for 64-bit network byte order

Message ID 20250311041641.785048-1-philipp@redfish-solutions.com (mailing list archive)
State Rejected
Headers
Series [v2,1/1] inet: add support for 64-bit network byte order |

Checks

Context Check Description
redhat-pt-bot/TryBot-apply_patch success Patch applied to master at the time it was sent
redhat-pt-bot/TryBot-32bit fail Patch caused testsuite regressions
linaro-tcwg-bot/tcwg_glibc_build--master-arm fail Patch failed to apply
linaro-tcwg-bot/tcwg_glibc_build--master-aarch64 fail Patch failed to apply

Commit Message

Philip Prindeville March 11, 2025, 4:16 a.m. UTC
  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

Joseph Myers March 11, 2025, 6:20 p.m. UTC | #1
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.
  
Philip Prindeville March 11, 2025, 6:44 p.m. UTC | #2
> 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…
  
Joseph Myers March 11, 2025, 7 p.m. UTC | #3
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").
  
Florian Weimer March 11, 2025, 8:07 p.m. UTC | #4
* 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
  
Joseph Myers March 11, 2025, 8:51 p.m. UTC | #5
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.
  
Philip Prindeville March 11, 2025, 9:29 p.m. UTC | #6
> 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
  
Joseph Myers March 11, 2025, 9:56 p.m. UTC | #7
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.)
  

Patch

diff --git a/NEWS b/NEWS
index 29d3d47b6454c37907313436bd0f7e26ee6fce9e..19e27ce4656cad571d6e413535133d4054341749 100644
--- a/NEWS
+++ b/NEWS
@@ -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
 
diff --git a/inet/Makefile b/inet/Makefile
index 79bacddfd5fd7e161be7e6ea0d89d74667ab604a..3a835512fcb2e1a8e8596c960e815190842e03e5 100644
--- a/inet/Makefile
+++ b/inet/Makefile
@@ -51,6 +51,7 @@  routines := \
   herrno \
   herrno-loc \
   htonl \
+  htonll \
   htons \
   idna \
   idna_name_classify \
diff --git a/inet/htonll.c b/inet/htonll.c
new file mode 100644
index 0000000000000000000000000000000000000000..7f6656c60587daecccaca9fa38a9cdffd079ba9a
--- /dev/null
+++ b/inet/htonll.c
@@ -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)
diff --git a/inet/htontest.c b/inet/htontest.c
index 3e04967a07835cf1f6b26a80ad44c48cb8b6a8f7..4939616d967894243a66844325754003af04faf1 100644
--- a/inet/htontest.c
+++ b/inet/htontest.c
@@ -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);
diff --git a/inet/netinet/in.h b/inet/netinet/in.h
index fa796be406a7120fd6b85d7851b94fe5938bebc0..4ff3ce32c5bb6b71a34a451d4d300e57024e5790 100644
--- a/inet/netinet/in.h
+++ b/inet/netinet/in.h
@@ -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
diff --git a/inet/test-hnto-types.c b/inet/test-hnto-types.c
index c396f4f27aca6fe3a87be5cb0f9c8e3a5b2e7371..8165d16c28febda69999238c0f25ca9034009d31 100644
--- a/inet/test-hnto-types.c
+++ b/inet/test-hnto-types.c
@@ -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;
 }
 
diff --git a/manual/socket.texi b/manual/socket.texi
index 8708cbb07ca02b5c6b38f1bc68c714f13471e3f3..0935259389865ea61358db07e998b8300b6596d7 100644
--- a/manual/socket.texi
+++ b/manual/socket.texi
@@ -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
diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist
index 461df01ffb8b6b4f8e673e27e3eccf13ad51a839..66bf16d6d581f428a68a3c28ce1684905ef5c22e 100644
--- a/sysdeps/mach/hurd/i386/libc.abilist
+++ b/sysdeps/mach/hurd/i386/libc.abilist
@@ -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
diff --git a/sysdeps/mach/hurd/x86_64/libc.abilist b/sysdeps/mach/hurd/x86_64/libc.abilist
index 6f235d20ba008f2b6a9e4bce20a959c51b0353b8..1e54400c11f4a7ccc4925acb5d0217fe5b54ead2 100644
--- a/sysdeps/mach/hurd/x86_64/libc.abilist
+++ b/sysdeps/mach/hurd/x86_64/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 38db77e4f7808c2070e0053b5c5bdabe2cd7a3ff..b205d8d595e0ccc57bfbff61a058fdf7ec83653d 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 637bfce9fbf4c3e18c5a925c48096d6aa2112720..b2019eedea8bffb7d88b92091f0fc6efbb96ee5e 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index 4a305cf7303f18113e94e2c8e5a77710227302a5..9ae26f1c1aca5c7470e62b8124b742ef1904f825 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 1d54f71b146d00a004926af01e12158a5b8e728b..aeb3406f1a51b763815914775577fb3ac8febf8d 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index ff7e8bc40beb21de35f1706f0452b0cd329896a5..88e2ee34968bc57b7cff793b4e5d4337bcd911c0 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index c3ed65467d14e729d693a503be84e6aba6cb9e3e..8e0bf4ff3e8ff2691f8189729b9c620bdfacbb14 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 991475380ca51a11821247f0bacde69cf5acd4bb..2789feec55a53f605cd849de442f521a9f38bee0 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 4fedf775d485f1a74d50d76c0fa83c32ab7ff6f4..962f9c60a149b60ca949c36f818ce1d0e95bdb7f 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
index 0024282289ffbee67ae570d5ef6d7ca55a2ca1ca..e25c704a124313eed280d0ed1ec136b3b6f3e7c1 100644
--- a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index 142595eb3ed52656a159f38428972a57fe23ab75..4629f21fc433f1e24ba9fdb5298a1077c003b8e6 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 85e7746c10a125b398c62e1e6136581418e909a4..f5199a56a1a05def380331eee7473a6beb9932a5 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 91dc1b83785655a57ed05e74829a116de278c2b5..1bdd27c4411dfe6571322a63c5934c6daf25b861 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index 3440e90f6fda9abbe969df7bbc7b1c04fd6c8acd..cfb46ee43b07cfe912717c3c73aec5f772844253 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index 5ee7b8c52fac1c935793fb37a46f3f6f0305e71f..98a1179658472dfcbfe58f83b810148c9c7579a9 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 6cb6328e7cabc321240ec3c21dc69b218021329a..e6c5bbae9ad9d34d848589d85cbf460431d45a2e 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index ae7474c0f03e880b6e7faad3fa47a5efb3311ff1..7cf186fcd4b61006f599d520f9b9b85808fd6922 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index cdf040dec27b87736c025bc3388bc05e8a02189e..ddb282e75cd44e09fbd0d9661cf019ae532dbad4 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
index c356a11b1ceafbc69a5f972ee01f75ac544d1861..488105d115104c0733fbda5625581f651ca8160e 100644
--- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
+++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index 7937f94cf092f6143f4cdb181641ac934ec7f25a..24243633ee39680b16c95027a73edec283c14be0 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index d6e35f31d248749053a7e845279c80407bec6b0e..0861a9aac126b9f5a83b0f1f741cdca70bd41a04 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index 2268d6890d73a5cce9949d46f7fee58bcf6df05c..181a64e4e77f921dff7c784e9b531ebcc860ca0b 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index 7f61b14bc8df2a165a3ff14fa34d1d7c095de9a4..1adcfdad66489d611a27c77fb1a7c575a5630a22 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index 4187241f5030d411d225a5cfce94db53b98ff01c..cc76d2c38611b0c1dbe0599b0440c57f4fc643aa 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index 8935beccac1a2c693e664f634aa27cd671dc852b..057d8af9ed273238fd687811fc4cb1386a54cde4 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index e69dc7ccf6952f895e04aedd80f19f5af28e14e6..729c5c4b078b5393db204627b0b660789e44294b 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 7d860001d8a57160e8fe33ada27abb8875bea8c2..4137ce6862cbca97da5990a04b4ce2a101196212 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index fcb8161841078f2bc6dcef904dd85a2d4b8a4a40..810317887daa47a195937068f5df260e85b05eab 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 3fd078d1257bf8d93b990cf2c10bfe4091ac8d56..f64c3942b990c6bd7bb81157622c6470f20c091d 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 1ce1fe9da7180b4fa65ceab1983b66e7876e70d9..b3144bee4f4a5ce548476d5a53dde2ae55981bd9 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 07507b86f6bd506c7549cd2e47eee2c6df815b4f..2b8a9aa8632ed8df9bed772b73272c54632c41e0 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index 5acf49dbe82a1a41c62df4fb8bfd178904225908..4d20d64b0ff310bf4f6c165ce0ea1ca7a007b397 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -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
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 02d1bb97dca5f0a5d576d2dbaac9f844b4b5b6c2..29d40ab353633969d5fba7e4085747a9704f3d75 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -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