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.