From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23051 invoked by alias); 4 Jun 2005 06:35:58 -0000 Mailing-List: contact binutils-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sources.redhat.com Received: (qmail 23043 invoked by uid 22791); 4 Jun 2005 06:35:53 -0000 Received: from sccrmhc13.comcast.net (HELO sccrmhc13.comcast.net) (204.127.202.64) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Sat, 04 Jun 2005 06:35:53 +0000 Received: from lucon.org ([24.6.212.230]) by comcast.net (sccrmhc13) with ESMTP id <2005060406355201600rdpgse>; Sat, 4 Jun 2005 06:35:52 +0000 Received: by lucon.org (Postfix, from userid 1000) id 5620564607; Fri, 3 Jun 2005 23:35:51 -0700 (PDT) Date: Sat, 04 Jun 2005 06:35:00 -0000 From: "H. J. Lu" To: binutils@sources.redhat.com Subject: PATCH: PR 992: regression: ld selective1 and selective2 fails, cris-elf Message-ID: <20050604063551.GA16809@lucon.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.1i X-SW-Source: 2005-06/txt/msg00069.txt.bz2 The updated patch of http://sourceware.org/ml/binutils/2005-06/msg00030.html should also fix PR 992. H.J. --- 2005-06-03 H.J. Lu PR 992 * ldexp.c (exp_mark_used_section): Set SEC_KEEP on current section for etree_assign, etree_provide and etree_provided. Call fold_binary on etree_binary. * ldlang.c (lang_mark_used_section_1): Handle load base. --- ld/ldexp.c.base 2005-06-02 16:02:26.000000000 -0700 +++ ld/ldexp.c 2005-06-03 23:16:33.000000000 -0700 @@ -1217,6 +1217,8 @@ align_n (bfd_vma value, bfd_vma align) void exp_mark_used_section (etree_type *tree, asection *current_section) { + bfd_vma dot = 0; + switch (tree->type.node_class) { case etree_value: @@ -1232,6 +1234,8 @@ exp_mark_used_section (etree_type *tree, break; case etree_binary: + fold_binary (tree, current_section, lang_allocating_phase_enum, + dot, &dot, TRUE); break; case etree_trinary: @@ -1243,12 +1247,12 @@ exp_mark_used_section (etree_type *tree, if (tree->assign.dst[0] != '.' || tree->assign.dst[1] != 0) { etree_value_type result; - bfd_vma dot = 0; result = exp_fold_tree_1 (tree->assign.src, current_section, lang_allocating_phase_enum, dot, &dot, TRUE); + current_section->flags |= SEC_KEEP; if (result.valid_p) { bfd_boolean create; --- ld/ldlang.c.base 2005-06-03 22:28:20.000000000 -0700 +++ ld/ldlang.c 2005-06-03 22:54:05.000000000 -0700 @@ -3065,7 +3065,12 @@ lang_mark_used_section_1 os = &(s->output_section_statement); if (os->bfd_section != NULL) - lang_mark_used_section_1 (os->children.head, os); + { + lang_mark_used_section_1 (os->children.head, os); + if (os->load_base) + exp_mark_used_section (os->load_base, + bfd_abs_section_ptr); + } } break; case lang_wild_statement_enum: