From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14098 invoked by alias); 11 Dec 2010 15:01:45 -0000 Received: (qmail 14087 invoked by uid 22791); 11 Dec 2010 15:01:44 -0000 X-SWARE-Spam-Status: No, hits=-2.8 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from localhost (HELO gcc.gnu.org) (127.0.0.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 11 Dec 2010 15:01:39 +0000 From: "hubicka at ucw dot cz" To: gcc-bugs@gcc.gnu.org Subject: [Bug target/46770] Replace .ctors/.dtors with .init_array/.fini_array on targets supporting them X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: target X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: hubicka at ucw dot cz X-Bugzilla-Status: ASSIGNED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: hjl.tools at gmail dot com X-Bugzilla-Target-Milestone: 4.6.0 X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Date: Sat, 11 Dec 2010 15:01:00 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2010-12/txt/msg01190.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46770 --- Comment #10 from Jan Hubicka 2010-12-11 15:01:34 UTC --- > This explanation doesn't stand: for instance, ARM EABI exclusively uses > .init_array, and the execution order for those is forward. And when linking > static libraries, the order of the function pointers in the section is strictly > growing, which means libraries are being initialized last. I noticed that EABI is reversed versus .ctor/.dtor ABIs. So I guess we need to decide 1) is there any kind of any documented requirement on initialization of static libraries? (i.e. is EABI fully standard conforming?) 2) I believe that the backwarding order of .ctor section was concious QOI issue. 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. Note that we make the situation bit worse than EABI has as the scheme is not strictly backwards or strictly forwards, but combination of both depending what compiler built the code. This probably does not make much of practical difference. Said that, I am personally happy with the patch and see how it should noticeably improve C++ startup times even with the recent ctor/dtor grouping code. Even if we basically eliminate the backward reading in text section, we still will have tendency to initialize data segment in backwarding order. I would like to hear opinion of someone who knows how these things was introduced (Iant, hopefully?) and if the patch is going to 4.6.0, I think we should get approval from one of our release managers. It is bit late for this patch now, though I think it qualify being a patch affecting one target only. Honza