From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15983 invoked by alias); 25 Apr 2006 03:22:29 -0000 Received: (qmail 15684 invoked by uid 22791); 25 Apr 2006 03:22:26 -0000 X-Spam-Check-By: sourceware.org Received: from smtp114.sbc.mail.mud.yahoo.com (HELO smtp114.sbc.mail.mud.yahoo.com) (68.142.198.213) by sourceware.org (qpsmtpd/0.31) with SMTP; Tue, 25 Apr 2006 03:22:23 +0000 Received: (qmail 66033 invoked from network); 25 Apr 2006 03:22:21 -0000 Received: from unknown (HELO lucon.org) (hjjean@sbcglobal.net@75.0.171.244 with login) by smtp114.sbc.mail.mud.yahoo.com with SMTP; 25 Apr 2006 03:22:21 -0000 Received: by lucon.org (Postfix, from userid 1000) id 4034B64034; Mon, 24 Apr 2006 20:22:19 -0700 (PDT) Date: Tue, 25 Apr 2006 16:37:00 -0000 From: "H. J. Lu" To: binutils@sources.redhat.com Cc: matz@suse.de Subject: Re: PATCH: Cache the result of _bfd_elf_check_kept_section Message-ID: <20060425032219.GA25146@lucon.org> References: <20060424175253.GA21687@lucon.org> <20060424231056.GA23563@lucon.org> <20060425022744.GA24749@lucon.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20060425022744.GA24749@lucon.org> User-Agent: Mutt/1.4.2.1i Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org X-SW-Source: 2006-04/txt/msg00334.txt.bz2 On Mon, Apr 24, 2006 at 07:27:44PM -0700, H. J. Lu wrote: > On Mon, Apr 24, 2006 at 04:10:56PM -0700, H. J. Lu wrote: > > On Mon, Apr 24, 2006 at 10:52:53AM -0700, H. J. Lu wrote: > > > This patch addresses the link speed issue by caching the result of > > > _bfd_elf_check_kept_section. > > > > > > > Apparently, I didn't include the correct patch. Here is the right one. > > > > Here is a patch without adding a new field to ELF section. > > I think the new field in ELF section is useful to avoid setting kept_section to -1L. H.J. ---- 2006-04-24 Michael Matz H.J. Lu * elf-bfd.h (bfd_elf_section_data): Add kept_section. (elf_kept_section): New. * elflink.c (match_group_member): Correctly iterate group members. (_bfd_elf_check_kept_section): Cache the result in elf_kept_section. --- bfd/elf-bfd.h.kept 2006-03-16 12:37:42.000000000 -0800 +++ bfd/elf-bfd.h 2006-04-24 20:11:00.000000000 -0700 @@ -1168,6 +1168,10 @@ struct bfd_elf_section_data the linker. */ asection *next_in_group; + /* The pointer to the real kept section. It is computed from the + kept_section field in asection due to section group. */ + asection *kept_section; + /* A pointer used for various section optimizations. */ void *sec_info; }; @@ -1180,6 +1184,7 @@ struct bfd_elf_section_data #define elf_group_id(sec) (elf_section_data(sec)->group.id) #define elf_next_in_group(sec) (elf_section_data(sec)->next_in_group) #define elf_sec_group(sec) (elf_section_data(sec)->sec_group) +#define elf_kept_section(sec) (elf_section_data(sec)->kept_section) /* Return TRUE if section has been discarded. */ #define elf_discarded_section(sec) \ --- bfd/elflink.c.kept 2006-04-24 15:36:18.000000000 -0700 +++ bfd/elflink.c 2006-04-24 20:18:03.000000000 -0700 @@ -6782,6 +6782,7 @@ match_group_member (asection *sec, asect if (bfd_elf_match_symbols_in_sections (s, sec)) return s; + s = elf_next_in_group (s); if (s == first) break; } @@ -6798,7 +6799,14 @@ _bfd_elf_check_kept_section (asection *s { asection *kept; + kept = elf_kept_section (sec); + if (kept) + return kept; + kept = sec->kept_section; + if (!kept) + return kept; + if (kept != NULL) { if (elf_sec_group (sec) != NULL) @@ -6806,6 +6814,12 @@ _bfd_elf_check_kept_section (asection *s if (kept != NULL && sec->size != kept->size) kept = NULL; } + + if (kept) + elf_kept_section (sec) = kept; + else + sec->kept_section = NULL; + return kept; }