Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 15 Aug 2004 16:27:03 +0100
From:      Doug Rabson <dfr@nlsystems.com>
To:        "Justin T. Gibbs" <gibbs@scsiguy.com>
Cc:        freebsd-current@freebsd.org
Subject:   Re: New nvidia drivers available
Message-ID:  <200408151627.03820.dfr@nlsystems.com>
In-Reply-To: <D5005C10BFCCF98A80A9F3D2@aslan.scsiguy.com>
References:  <Pine.GSO.4.43.0408151001050.15254-100000@sea.ntplx.net> <200408151611.04764.dfr@nlsystems.com> <D5005C10BFCCF98A80A9F3D2@aslan.scsiguy.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sunday 15 August 2004 16:16, Justin T. Gibbs wrote:
> >> I thought that static constructor invocation was deterministic
> >> based on link order.  Does the C++ spec really indicate that the
> >> order of construction can be random?
> >
> > I don't think the spec places any restrictions on constructor
> > ordering. The problem here is that you get different behaviour
> > depending on whether you link with libGL first followed by
> > libpthread (in that case libpthread initialises first) or if you
> > link in the other order (in which case libGL initialises first). As
> > far as I can see, rtld calls the _init sections of each shared
> > library in reverse order with the last library linked against being
> > initialised first.
>
> But such ordering restrictions also apply to things like weak
> symbols, so I don't think that imposing a link order restriction to
> solve this issue is really a problem.

The algorithm for weak symbols is pretty simple - you always get either 
the first strong symbol that rtld finds in its search or the last weak 
symbol. I think we arrange for stuff like open(2) to be weak in libc 
and strong in libpthread.

>
> >From my Microsoft days, I know that at least PowerPoint took
> > advantage
>
> of the known order of static constructor invocation.  The splash
> screen was executed from a static constructor in the first .o linked
> into the executable.  I'm just curious if this is something the C++
> spec says anything about.  I'd be surprised if it didn't.

I'm sure that constructor ordering differs between binutils toolchains 
on unix systems and Microsoft toolchains on win32 systems. The software 
I write in my day job uses C++ constructors heavily and I'm certain 
that things get constructed in a different order on the two platforms. 
We just accept it and write code that can initialise in any order.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200408151627.03820.dfr>