[glibc/arm/malloc-mte-v3] malloc: Put MALLOC_ALIGNMENT depends in one header

Yury Khrustalev via Glibc-cvs <[email protected]> Mon, 1 Jun 2026 11:43:22 +0000 (GMT)
Newsgroups gmane.comp.lib.glibc.cvs
Message-ID <[email protected]>
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=99a6c42ad6ebb0b434e3540797dfdbf5edb07441

commit 99a6c42ad6ebb0b434e3540797dfdbf5edb07441
Author: Yury Khrustalev <[email protected]>
Date:   Wed Apr 22 15:47:33 2026 +0100

    malloc: Put MALLOC_ALIGNMENT depends in one header
    
    The 'malloc-alignment.h' header defines macro MALLOC_ALIGNMENT that
    depends on SIZE_SZ which in turn depends on INTERNAL_SIZE_T.
    
    These dependencies used to be defined in 'malloc-size.h'. We should
    either merge these two headers or move the dependencies or change the
    'malloc-alignment.h' header to make sure it is self-consistent.
    
    This commit does the latter. In addition we fix the tst-mallocalign1.c
    test that uses the MALLOC_ALIGN_MASK internal to malloc. Since it's
    been moved to 'malloc-alignment.h' it makes sense to include this
    header into the test source.

Diff:
---
 malloc/tst-mallocalign1.c          |  2 +-
 sysdeps/generic/malloc-alignment.h | 43 +++++++++++++++++++++++++++++++++++++-
 sysdeps/generic/malloc-size.h      | 42 +------------------------------------
 sysdeps/i386/malloc-alignment.h    | 14 +++++++++++++
 4 files changed, 58 insertions(+), 43 deletions(-)

diff --git a/malloc/tst-mallocalign1.c b/malloc/tst-mallocalign1.c
index 0ef0674b46..1ba7e69d2c 100644
--- a/malloc/tst-mallocalign1.c
+++ b/malloc/tst-mallocalign1.c
@@ -19,7 +19,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <inttypes.h>
-#include <malloc-size.h>
+#include <malloc-alignment.h>
 #include <support/check.h>
 
 static void *
diff --git a/sysdeps/generic/malloc-alignment.h b/sysdeps/generic/malloc-alignment.h
index 28c50abe1f..8684b9efd1 100644
--- a/sysdeps/generic/malloc-alignment.h
+++ b/sysdeps/generic/malloc-alignment.h
@@ -1,4 +1,5 @@
-/* Define MALLOC_ALIGNMENT for malloc.  Generic version.
+/* Define INTERNAL_SIZE_T and MALLOC_ALIGNMENT for malloc.
+   Generic version.
    Copyright (C) 2017-2026 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -19,6 +20,44 @@
 #ifndef _GENERIC_MALLOC_ALIGNMENT_H
 #define _GENERIC_MALLOC_ALIGNMENT_H
 
+#include <stddef.h>
+
+/* INTERNAL_SIZE_T is the word-size used for internal bookkeeping of
+   chunk sizes.
+
+   The default version is the same as size_t.
+
+   While not strictly necessary, it is best to define this as an
+   unsigned type, even if size_t is a signed type. This may avoid some
+   artificial size limitations on some systems.
+
+   On a 64-bit machine, you may be able to reduce malloc overhead by
+   defining INTERNAL_SIZE_T to be a 32 bit `unsigned int' at the
+   expense of not being able to handle more than 2^32 of malloced
+   space. If this limitation is acceptable, you are encouraged to set
+   this unless you are on a platform requiring 16byte alignments. In
+   this case the alignment requirements turn out to negate any
+   potential advantages of decreasing size_t word size.
+
+   Implementors: Beware of the possible combinations of:
+     - INTERNAL_SIZE_T might be signed or unsigned, might be 32 or 64 bits,
+       and might be the same width as int or as long
+     - size_t might have different width and signedness as INTERNAL_SIZE_T
+     - int and long might be 32 or 64 bits, and might be the same width
+
+   To deal with this, most comparisons and difference computations
+   among INTERNAL_SIZE_Ts should cast them to unsigned long, being
+   aware of the fact that casting an unsigned int to a wider long does
+   not sign-extend. (This also makes checking for negative numbers
+   awkward.) Some of these casts result in harmless compiler warnings
+   on some systems.  */
+#ifndef INTERNAL_SIZE_T
+# define INTERNAL_SIZE_T size_t
+#endif
+
+/* The corresponding word size.  */
+#define SIZE_SZ (sizeof (INTERNAL_SIZE_T))
+
 /* MALLOC_ALIGNMENT is the minimum alignment for malloc'ed chunks.  It
    must be a power of two at least 2 * SIZE_SZ, even on machines for
    which smaller alignments would suffice. It may be defined as larger
@@ -27,5 +66,7 @@
 #define MALLOC_ALIGNMENT (2 * SIZE_SZ < __alignof__ (long double) \
 			  ? __alignof__ (long double) : 2 * SIZE_SZ)
 
+/* The corresponding bit mask value.  */
+#define MALLOC_ALIGN_MASK (MALLOC_ALIGNMENT - 1)
 
 #endif /* !defined(_GENERIC_MALLOC_ALIGNMENT_H) */
diff --git a/sysdeps/generic/malloc-size.h b/sysdeps/generic/malloc-size.h
index adaf01619d..5b12bc9005 100644
--- a/sysdeps/generic/malloc-size.h
+++ b/sysdeps/generic/malloc-size.h
@@ -1,5 +1,4 @@
-/* Define INTERNAL_SIZE_T, SIZE_SZ, MALLOC_ALIGNMENT and MALLOC_ALIGN_MASK
-   for malloc.
+/* Size-related definitions for malloc: generic version.
    Copyright (C) 2021-2026 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -20,45 +19,6 @@
 #ifndef _GENERIC_MALLOC_SIZE_H
 #define _GENERIC_MALLOC_SIZE_H
 
-/* INTERNAL_SIZE_T is the word-size used for internal bookkeeping of
-   chunk sizes.
-
-   The default version is the same as size_t.
-
-   While not strictly necessary, it is best to define this as an
-   unsigned type, even if size_t is a signed type. This may avoid some
-   artificial size limitations on some systems.
-
-   On a 64-bit machine, you may be able to reduce malloc overhead by
-   defining INTERNAL_SIZE_T to be a 32 bit `unsigned int' at the
-   expense of not being able to handle more than 2^32 of malloced
-   space. If this limitation is acceptable, you are encouraged to set
-   this unless you are on a platform requiring 16byte alignments. In
-   this case the alignment requirements turn out to negate any
-   potential advantages of decreasing size_t word size.
-
-   Implementors: Beware of the possible combinations of:
-     - INTERNAL_SIZE_T might be signed or unsigned, might be 32 or 64 bits,
-       and might be the same width as int or as long
-     - size_t might have different width and signedness as INTERNAL_SIZE_T
-     - int and long might be 32 or 64 bits, and might be the same width
-
-   To deal with this, most comparisons and difference computations
-   among INTERNAL_SIZE_Ts should cast them to unsigned long, being
-   aware of the fact that casting an unsigned int to a wider long does
-   not sign-extend. (This also makes checking for negative numbers
-   awkward.) Some of these casts result in harmless compiler warnings
-   on some systems.  */
-#ifndef INTERNAL_SIZE_T
-# define INTERNAL_SIZE_T size_t
-#endif
-
-/* The corresponding word size.  */
-#define SIZE_SZ (sizeof (INTERNAL_SIZE_T))
-
 #include <malloc-alignment.h>
 
-/* The corresponding bit mask value.  */
-#define MALLOC_ALIGN_MASK (MALLOC_ALIGNMENT - 1)
-
 #endif /* _GENERIC_MALLOC_SIZE_H */
diff --git a/sysdeps/i386/malloc-alignment.h b/sysdeps/i386/malloc-alignment.h
index d1e60948c9..ff870c2f73 100644
--- a/sysdeps/i386/malloc-alignment.h
+++ b/sysdeps/i386/malloc-alignment.h
@@ -19,6 +19,20 @@
 #ifndef _I386_MALLOC_ALIGNMENT_H
 #define _I386_MALLOC_ALIGNMENT_H
 
+#include <stddef.h>
+
+/* INTERNAL_SIZE_T is the word-size used for internal bookkeeping of
+   chunk sizes.  See sysdeps/generic/malloc-alignment.h for details.  */
+#ifndef INTERNAL_SIZE_T
+# define INTERNAL_SIZE_T size_t
+#endif
+
+/* The corresponding word size.  */
+#define SIZE_SZ (sizeof (INTERNAL_SIZE_T))
+
 #define MALLOC_ALIGNMENT 16
 
+/* The corresponding bit mask value.  */
+#define MALLOC_ALIGN_MASK (MALLOC_ALIGNMENT - 1)
+
 #endif /* !defined(_I386_MALLOC_ALIGNMENT_H) */