public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "ian at airs dot com" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug target/46770] Replace .ctors/.dtors with .init_array/.fini_array on targets supporting them Date: Mon, 13 Dec 2010 02:30:00 -0000 [thread overview] Message-ID: <bug-46770-4-ulbjl768WZ@http.gcc.gnu.org/bugzilla/> (raw) In-Reply-To: <bug-46770-4@http.gcc.gnu.org/bugzilla/> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46770 --- Comment #47 from Ian Lance Taylor <ian at airs dot com> 2010-12-13 02:29:46 UTC --- Jan Hubicka <hubicka@ucw.cz> writes: > 1) is there any kind of any documented requirement on initialization of > static libraries? (i.e. is EABI fully standard conforming?) Not in C++. > 2) I believe that the backwarding order of .ctor section was concious > QOI issue. Yes. Some programs may implicitly rely on the fact that global constructors in archives linked later are run before constructors in the object linked against those archives. That is, given g++ foo.o -lbar where bar is a static archive, not a shared library, then currently the global constructors in objects pulled in from libbar.c will be executed before the global constructors in foo.o. That was an intentional choice because it is more likely to be correct than the reverse. However, the C++ standard does not guarantee it, so any programs which relies on this ordering is technically invalid. But of course it does not follow that we should break such programs for no reason. > I wonder how much legacy code this might break when static > libraries start initializing after main modules. > i686-linux execute a lot more code than EABI. I don't know. Comment #1 refers to relative relocations. I'm sure which relocations this means. In a linked binary I would not expect to see any relocations in the .ctors section. As far as backward disk seeks, I assume this refers to the constructors that the program calls, not the .ctors section itself. The program will walk through the .ctors section forward to find then end and then backward to invoke the constructors, so no backward seek should be introduced there. So I assume the backward seek refers to the tendency of the constructors called earlier to be located later in the binary. I think the appropriate fix for this is better code positioning in the linker, which is completely in control. I'm not at all opposed to using .init_array, but changing the linker would be a better way to address this particular issue, as it would encourage such things as putting all the global constructors together rather than scattered across the program. As Mark says, obviously we can not switch to .init_array for code using constructor priorities unless we modify the linker. But I don't think that is a particularly big deal; we can continue to use .ctors for constructors with priorities and use .init_array for normal constructors, the latter case being vastly more common. Ian
next prev parent reply other threads:[~2010-12-13 2:30 UTC|newest] Thread overview: 110+ messages / expand[flat|nested] mbox.gz Atom feed top 2010-12-02 19:21 [Bug target/46770] New: " mh+gcc at glandium dot org 2010-12-02 19:24 ` [Bug target/46770] " mh+gcc at glandium dot org 2010-12-02 22:22 ` hubicka at gcc dot gnu.org 2010-12-02 23:01 ` hjl.tools at gmail dot com 2010-12-07 15:45 ` hjl.tools at gmail dot com 2010-12-07 15:45 ` hjl.tools at gmail dot com 2010-12-07 16:45 ` hjl.tools at gmail dot com 2010-12-09 17:55 ` hjl.tools at gmail dot com 2010-12-11 14:15 ` hubicka at gcc dot gnu.org 2010-12-11 14:28 ` hjl.tools at gmail dot com 2010-12-11 14:36 ` mh+gcc at glandium dot org 2010-12-11 15:01 ` hubicka at ucw dot cz 2010-12-11 15:34 ` hjl.tools at gmail dot com 2010-12-11 16:17 ` hubicka at ucw dot cz 2010-12-11 16:54 ` hjl.tools at gmail dot com 2010-12-11 18:33 ` mmitchel at gcc dot gnu.org 2010-12-11 18:47 ` hjl.tools at gmail dot com 2010-12-11 18:50 ` mark at codesourcery dot com 2010-12-11 19:02 ` hjl.tools at gmail dot com 2010-12-11 19:33 ` mark at codesourcery dot com 2010-12-11 19:44 ` hjl.tools at gmail dot com 2010-12-11 19:47 ` hjl.tools at gmail dot com 2010-12-11 19:48 ` mmitchel at gcc dot gnu.org 2010-12-11 19:51 ` hjl.tools at gmail dot com 2010-12-11 19:53 ` hjl.tools at gmail dot com 2010-12-11 19:57 ` mark at codesourcery dot com 2010-12-11 20:04 ` hjl.tools at gmail dot com 2010-12-11 20:17 ` hjl.tools at gmail dot com 2010-12-11 20:19 ` mark at codesourcery dot com 2010-12-11 21:01 ` hubicka at ucw dot cz 2010-12-11 21:07 ` mark at codesourcery dot com 2010-12-11 21:07 ` hjl.tools at gmail dot com 2010-12-11 22:57 ` hjl.tools at gmail dot com 2010-12-11 23:19 ` mark at codesourcery dot com 2010-12-11 23:28 ` hjl.tools at gmail dot com 2010-12-11 23:30 ` mark at codesourcery dot com 2010-12-11 23:48 ` hjl.tools at gmail dot com 2010-12-11 23:55 ` mark at codesourcery dot com 2010-12-12 0:01 ` hjl.tools at gmail dot com 2010-12-12 0:03 ` mark at codesourcery dot com 2010-12-12 0:08 ` hjl.tools at gmail dot com 2010-12-12 0:12 ` mark at codesourcery dot com 2010-12-12 0:20 ` hjl.tools at gmail dot com 2010-12-12 0:25 ` hjl.tools at gmail dot com 2010-12-12 0:25 ` mark at codesourcery dot com 2010-12-12 0:32 ` hjl.tools at gmail dot com 2010-12-12 15:54 ` hjl.tools at gmail dot com 2010-12-12 18:40 ` mark at codesourcery dot com 2010-12-13 2:30 ` ian at airs dot com [this message] 2010-12-13 18:08 ` joseph at codesourcery dot com 2010-12-13 19:41 ` hjl.tools at gmail dot com 2010-12-13 20:24 ` ccoutant at gcc dot gnu.org 2010-12-13 20:31 ` hjl.tools at gmail dot com 2010-12-13 20:42 ` ccoutant at gcc dot gnu.org 2010-12-13 20:48 ` hjl.tools at gmail dot com 2010-12-14 0:39 ` ian at airs dot com 2010-12-14 1:14 ` hjl.tools at gmail dot com 2010-12-14 1:24 ` ccoutant at gcc dot gnu.org 2010-12-14 1:32 ` hjl.tools at gmail dot com 2010-12-14 12:52 ` hubicka at gcc dot gnu.org 2010-12-14 13:17 ` paolo.carlini at oracle dot com 2010-12-14 13:26 ` hubicka at ucw dot cz 2010-12-14 13:33 ` paolo.carlini at oracle dot com 2010-12-14 15:17 ` mark at codesourcery dot com 2011-03-25 19:55 ` jakub at gcc dot gnu.org 2011-04-28 16:17 ` rguenth at gcc dot gnu.org 2011-05-09 10:11 ` amodra at gmail dot com 2011-06-23 16:22 ` ian at airs dot com 2011-06-23 23:17 ` hjl.tools at gmail dot com 2011-06-24 13:22 ` ian at airs dot com 2011-06-24 13:35 ` jakub at gcc dot gnu.org 2011-08-20 20:08 ` hjl at gcc dot gnu.org 2011-08-20 20:37 ` [Bug other/46770] " hjl.tools at gmail dot com 2012-02-18 6:05 ` jingyu at gcc dot gnu.org 2012-02-18 7:21 ` jingyu at gcc dot gnu.org 2012-02-22 22:28 ` jingyu at gcc dot gnu.org 2012-04-17 1:22 ` ccoutant at gcc dot gnu.org 2012-04-17 14:59 ` hjl.tools at gmail dot com 2012-04-17 15:30 ` ppluzhnikov at google dot com 2012-04-17 15:49 ` hjl.tools at gmail dot com 2012-04-17 17:18 ` ppluzhnikov at google dot com 2012-04-17 18:04 ` ccoutant at gcc dot gnu.org 2012-04-17 18:20 ` hjl.tools at gmail dot com 2012-04-17 18:54 ` ccoutant at google dot com 2012-04-17 19:04 ` hjl.tools at gmail dot com 2012-04-17 20:25 ` ccoutant at google dot com 2012-04-17 20:39 ` hjl.tools at gmail dot com 2012-04-17 21:12 ` ccoutant at google dot com 2012-04-17 21:34 ` hubicka at ucw dot cz 2012-04-17 22:00 ` ccoutant at google dot com 2012-04-17 22:27 ` hjl.tools at gmail dot com 2012-04-18 0:05 ` tglek at mozilla dot com 2012-04-18 0:51 ` ppluzhnikov at google dot com 2012-04-18 1:33 ` tglek at mozilla dot com 2012-04-18 3:53 ` ian at airs dot com 2012-04-18 4:58 ` tglek at mozilla dot com 2012-04-19 0:16 ` ian at airs dot com 2012-04-19 15:15 ` hubicka at ucw dot cz 2012-04-22 8:03 ` igodard at pacbell dot net 2012-04-22 17:04 ` ian at airs dot com 2012-04-22 17:47 ` igodard at pacbell dot net 2012-04-22 18:36 ` hubicka at ucw dot cz 2012-04-22 18:45 ` paolo.carlini at oracle dot com 2012-04-22 19:37 ` igodard at pacbell dot net 2012-04-22 21:19 ` ian at airs dot com 2012-04-22 21:53 ` igodard at pacbell dot net 2012-04-22 22:28 ` ian at airs dot com 2014-10-01 16:46 ` marcelo at brs dot ind.br 2014-10-01 18:16 ` marcelo at brs dot ind.br 2014-10-01 18:50 ` ian at airs dot com
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=bug-46770-4-ulbjl768WZ@http.gcc.gnu.org/bugzilla/ \ --to=gcc-bugzilla@gcc.gnu.org \ --cc=gcc-bugs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).