[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