On Fri, May 17, 2024 at 08:45:04PM +0900, Masahiro Yamada wrote: > > This series refactors __constructor_order because > __constructor_order_last() is unneeded. > > BTW, the comments in kselftest_harness.h was confusing to me. > > As far as I tested, all arches executed constructors in the forward > order. > > [test code] > > #include <stdio.h> > > static int x; > > static void __attribute__((constructor)) increment(void) > { > x += 1; > } > > static void __attribute__((constructor)) multiply(void) > { > x *= 2; > } > > int main(void) > { > printf("foo = %d\n", x); > return 0; > } > > It should print 2 for forward order systems, 1 for reverse order systems. > > I executed it on some archtes by using QEMU. I always got 2. IIRC, and it was a long time ago now, it was actually a difference between libc implementations where I encountered the problem. Maybe glibc vs Bionic? -Kees -- Kees Cook