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