On Tue, 2017-06-06 at 07:50 +0200, Florian Weimer wrote: > * 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).
So the question remains, where is libat_have_strexbhd set? As near as I can tell it isn't set, which would make the libatomic IFUNC pointless on arm. Steve Ellcey