* Steve Ellcey: > I have a question about the use of IFUNCs in libatomic. I was looking at the > arm implementation and in gcc/libatomic/config/linux/arm/host-config.h I see: > > extern bool libat_have_strexbhd HIDDEN; > # define IFUNC_COND_1 libat_have_strexbhd > > I also see that gcc/libatomic/config/linux/arm/init.c has: > > bool libat_have_strexbhd; > static void __attribute__((constructor)) > init_cpu_revision (void) > { > } > > What I don't see is any place that libat_have_strexbhd would ever get > set. What am I missing here? init_cpu_revision is going to get called > when libatomic is first loaded since it is a constructor but it doesn't > seem to do anything and it isn't going to set libat_have_strexbhd as far > as I can see.
Setting the variable in the constructor wouldn't influence IFUNC resolver behavior because those can run before ELF constructors (even with lazy binding).