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


  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: link
Be 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).