[PATCH] ld: testsuite: Fix integer overflow in ld/testsuite/ld-elf/init-mixed.c.
Alan Modra
amodra@gmail.com
Sun Jul 19 08:28:16 GMT 2026
On Fri, Jul 17, 2026 at 06:11:22PM +0200, Jan Dubiec wrote:
> The code assumes that int is 32 bits wide (see e.g. line 97), which is
> not necessarily true.
>
> Signed-off-by: Jan Dubiec <jdx@o2.pl>
> ---
> ld/testsuite/ld-elf/init-mixed.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/ld/testsuite/ld-elf/init-mixed.c b/ld/testsuite/ld-elf/init-mixed.c
> index f401ded4d70..d8ee578cc27 100644
> --- a/ld/testsuite/ld-elf/init-mixed.c
> +++ b/ld/testsuite/ld-elf/init-mixed.c
> @@ -1,9 +1,10 @@
> #include "config.h"
> #include <stdio.h>
> #include <stdlib.h>
> +#include <stdint.h>
>
> #ifdef HAVE_INITFINI_ARRAY
> -static int count;
> +static int32_t count;
>
> static void
> init1005 ()
Fair enough, but I'm going to commit the following instead.
The variable isn't a counter so rename it, and use small values that
won't overflow a target with 16-bit int. Since commit 2e806738bd
there is a possibility of running tests on such targets.
* testsuite/ld-elf/init-mixed.c: Rename "count" to "order"
and use values of 0 to 6 when checking init/fini order.
---
ld/testsuite/ld-elf/init-mixed.c | 48 ++++++++++++++++----------------
1 file changed, 24 insertions(+), 24 deletions(-)
diff --git a/ld/testsuite/ld-elf/init-mixed.c b/ld/testsuite/ld-elf/init-mixed.c
index f401ded4d70..7aeebca1389 100644
--- a/ld/testsuite/ld-elf/init-mixed.c
+++ b/ld/testsuite/ld-elf/init-mixed.c
@@ -3,14 +3,14 @@
#include <stdlib.h>
#ifdef HAVE_INITFINI_ARRAY
-static int count;
+static int order;
static void
init1005 ()
{
- if (count != 0)
+ if (order != 0)
abort ();
- count = 1005;
+ order = 1;
}
void (*const init_array1005[]) ()
__attribute__ ((section (".init_array.01005"), aligned (sizeof (void *))))
@@ -18,7 +18,7 @@ void (*const init_array1005[]) ()
static void
fini1005 ()
{
- if (count != 1005)
+ if (order != 1)
abort ();
}
void (*const fini_array1005[]) ()
@@ -28,16 +28,16 @@ void (*const fini_array1005[]) ()
static void
ctor1007a ()
{
- if (count != 1005)
+ if (order != 1)
abort ();
- count = 1006;
+ order = 2;
}
static void
ctor1007b ()
{
- if (count != 1006)
+ if (order != 2)
abort ();
- count = 1007;
+ order = 3;
}
void (*const ctors1007[]) ()
__attribute__ ((section (".ctors.64528"), aligned (sizeof (void *))))
@@ -45,16 +45,16 @@ void (*const ctors1007[]) ()
static void
dtor1007a ()
{
- if (count != 1006)
+ if (order != 2)
abort ();
- count = 1005;
+ order = 1;
}
static void
dtor1007b ()
{
- if (count != 1007)
+ if (order != 3)
abort ();
- count = 1006;
+ order = 2;
}
void (*const dtors1007[]) ()
__attribute__ ((section (".dtors.64528"), aligned (sizeof (void *))))
@@ -63,9 +63,9 @@ void (*const dtors1007[]) ()
static void
init65530 ()
{
- if (count != 1007)
+ if (order != 3)
abort ();
- count = 65530;
+ order = 4;
}
void (*const init_array65530[]) ()
__attribute__ ((section (".init_array.65530"), aligned (sizeof (void *))))
@@ -73,9 +73,9 @@ void (*const init_array65530[]) ()
static void
fini65530 ()
{
- if (count != 65530)
+ if (order != 4)
abort ();
- count = 1007;
+ order = 3;
}
void (*const fini_array65530[]) ()
__attribute__ ((section (".fini_array.65530"), aligned (sizeof (void *))))
@@ -84,16 +84,16 @@ void (*const fini_array65530[]) ()
static void
ctor65535a ()
{
- if (count != 65530)
+ if (order != 4)
abort ();
- count = 65535;
+ order = 5;
}
static void
ctor65535b ()
{
- if (count != 65535)
+ if (order != 5)
abort ();
- count = 65536;
+ order = 6;
}
void (*const ctors65535[]) ()
__attribute__ ((section (".ctors"), aligned (sizeof (void *))))
@@ -101,16 +101,16 @@ void (*const ctors65535[]) ()
static void
dtor65535b ()
{
- if (count != 65536)
+ if (order != 6)
abort ();
- count = 65535;
+ order = 5;
}
static void
dtor65535a ()
{
- if (count != 65535)
+ if (order != 5)
abort ();
- count = 65530;
+ order = 4;
}
void (*const dtors65535[]) ()
__attribute__ ((section (".dtors"), aligned (sizeof (void *))))
--
Alan Modra
More information about the Binutils
mailing list