Global destructor order problems (was: Re: Are ports supposed to build and run on 10-CURRENT?)

Konstantin Belousov kostikbel at
Wed Jun 26 21:05:42 UTC 2013

On Wed, Jun 26, 2013 at 10:59:24PM +0200, Dimitry Andric wrote:
> On Jun 26, 2013, at 22:45, Konstantin Belousov <kostikbel at> wrote:
> > On Wed, Jun 26, 2013 at 09:26:09PM +0200, Dimitry Andric wrote:
> >> This revision is not in 9.1-RELEASE, but it is in 9-STABLE, so the
> >> problem can also be reproduced there.
> > ...
> >> This is roughly gcc 4.3.0 and later.  For example, gcc 4.8 generates:
> > I just tested the thing with gcc 4.8 on up to date stable/9 and HEAD.
> > In both cases, major tom did not fail, at least not in the peculiar way.
> > The gcc-generated code passed the PLT address of the corresponding
> > destructor.
> That is strange, did you compile the main program with -fPIC?  That is
> the problem case.  If you don't compile the main program with -fPIC, the
> problem will indeed not occur.

I just used the Makefile provided by the earlier message, and it contains
the -fPIC flag (which is strange thing to do on its own, binaries should
use -fPIE).

This is how the registration for the outer dtr looks for me, gcc 4.8.1/i386:

   0x08048763 <+42>:    call   0x8048520 <_ZN5OuterC1Ev at plt>
   0x08048768 <+47>:    lea    0x28(%ebx),%eax
   0x0804876e <+53>:    mov    %eax,0x8(%esp)
   0x08048772 <+57>:    lea    0x34(%ebx),%eax
   0x08048778 <+63>:    mov    %eax,0x4(%esp)
   0x0804877c <+67>:    mov    -0x4(%ebx),%eax
   0x08048782 <+73>:    mov    %eax,(%esp)
   0x08048785 <+76>:    call   0x8048500 <__cxa_atexit at plt>

ebx was set up earlier as the GOT pointer.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 834 bytes
Desc: not available
URL: <>

More information about the freebsd-ports mailing list