This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Is init_priority file scope or global scope?
- From: Dave Korn <dave dot korn dot cygwin at gmail dot com>
- To: "H.J. Lu" <hjl dot tools at gmail dot com>
- Cc: GCC Development <gcc at gcc dot gnu dot org>
- Date: Sun, 12 Dec 2010 05:46:14 +0000
- Subject: Re: Is init_priority file scope or global scope?
- References: <AANLkTimB0GKS9XC4Nh9DmVjhwrfewxPoXQQBv60B31m3@mail.gmail.com>
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