This is the mail archive of the mailing list for the glibc project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

ELF destructor order vs constructor order

Suppose that the constructors for object A run before the constructors
for object B.  (For the following, it does not matter how A and B were

Should it be possible that as the result of a dlclose call (or process
termination), the destructors for A also run before the destructors for
B?  Or should the destructors always run in the reverse order of
construction (assuming they happen during the same dlclose call)?

I think the answer should be that the reverse order is used.

We have a downstream report where a developer points out that they
perceive the destructor order more or less as random (in #1133521,
unfortunately not a public bug).  The reason is that the C++ compiler
tends to vary its emitted symbols with optimization settings and code
changes, and the dependencies recorded during lazy binding currently end
up changing the destructor order.

I think we should disregard the dynamic dependency information and
always perform the destructor calls in reverse order of the constructor
calls (for the objects that are about to be unloaded).



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]