Is init_priority file scope or global scope?

Dave Korn
Sun Dec 12 07:45:00 GMT 2010

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.


More information about the Gcc mailing list