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

Reply via email to