On 12/12/2010 00:47, H.J. Lu wrote: > Hi, > > Using .init_array section on Linux/x86 raised a question on > init_priority. GCC manual says > > `init_priority (PRIORITY)' > In Standard C++, objects defined at namespace scope are guaranteed > to be initialized in an order in strict accordance with that of > their definitions _in a given translation unit_. No guarantee is > made for initializations across translation units. However, GNU > C++ allows users to control the order of initialization of objects > defined at namespace scope with the `init_priority' attribute by > specifying a relative PRIORITY, a constant integral expression > currently bounded between 101 and 65535 inclusive. Lower numbers > indicate a higher priority. > > In the following example, `A' would normally be created before > `B', but the `init_priority' attribute has reversed that order: > > Some_Class A __attribute__ ((init_priority (2000))); > Some_Class B __attribute__ ((init_priority (543))); > > Note that the particular values of PRIORITY do not matter; only > their relative ordering. > > Is init_priority file scope or global scope? I consider init_priority is > file scope. Is that a correct assumption? >
At least on PE-COFF, it's implemented by appending a numeric string to the .ctor/.dtor section name for the object's __GLOBAL__[CD] entries and letting them all get sorted by the linker into numeric order in the final output .ctors/.dtors table, so it ought to be global. cheers, DaveK