http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46770

--- Comment #35 from H.J. Lu <hjl.tools at gmail dot com> 2010-12-11 23:48:29 
UTC ---
(In reply to comment #34)
> On 12/11/2010 3:28 PM, hjl.tools at gmail dot com wrote:
> 
> > 1. How do you find out what priority "foo" constructor has?
> 
> If you're looking at source code, read the source.

This is not the problem.

>  If you're looking at
> object code, look at what section the constructor is in; the numerical
> value of .ctor.NNNNN indicates the priority.

You have 2 problems:

1.  __attribute__((init_priority(1005))) doesn't map to
.ctors.1005 section.
2. You need to check .init_array.NNNN sections on some
platforms.

> > 2. How do you run your constructor before "foo"?
> 
> Given it a higher priority.

The highest priority is 65535. What if foo's
constructor already has 65535 priority?

My point is GCC supports:

--
    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.
--

That is the constructor order between A and B. We don't support
"interleaving constructor priorities" between object files.

Reply via email to