Hi,

On Mon, 22 Aug 2011, H.J. Lu wrote:

> >> Oh, I thought it was data initialized by the constructor ...
> >
> > Sriramans patch right now has a function __cpu_indicator_init which is 
> > called from (adhoc constructed) ctors and that initializes variables
> > __cpu_model and __cpu_features ;-)  There's no __cpu_indicator symbol :)
> >
> > I think the whole initializer function and the associated data blobs have
> > to sit in static libgcc and be hidden.  By that all shared modules
> > will have their own copies of the model and features (and the initializer
> > function) so there won't be issues with copy relocs, or cross shared lib
> > calls while relocating the modules.  Dynamically they will contain the
> > same data always, but it's not many bytes, and only modules making use of
> > this facility will pay it.
> >
> > The initializer function has to be callable from pre-.init contexts, e.g.
> > ifunc dispatchers.  And to make life easier there should be one ctor
> > function calling this initializer function too, so that normal code can
> > rely on it being already called saving one check.
> >
> 
> It sounds more complicated than necessary.  Why not just do it
> on demand like glibc does?

Ehm, the only difference would be to not have a ctor in libgcc that looks 
like so:

void __attribute__((constructor)) bla(void)
{
  __cpu_indicator_init ();
}

I don't see any complication.?


Ciao,
Michael.

Reply via email to