From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28722 invoked by alias); 28 Aug 2009 00:02:41 -0000 Received: (qmail 28126 invoked by uid 22791); 28 Aug 2009 00:02:40 -0000 X-SWARE-Spam-Status: No, hits=-0.6 required=5.0 tests=AWL,BAYES_00,NO_DNS_FOR_FROM X-Spam-Check-By: sourceware.org Received: from mga06.intel.com (HELO orsmga101.jf.intel.com) (134.134.136.21) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 28 Aug 2009 00:02:35 +0000 Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP; 27 Aug 2009 16:49:34 -0700 X-ExtLoop1: 1 Received: from gnu-6.sc.intel.com ([10.3.194.198]) by orsmga001.jf.intel.com with ESMTP; 27 Aug 2009 17:01:57 -0700 Received: by gnu-6.sc.intel.com (Postfix, from userid 500) id 5DDF481210D; Thu, 27 Aug 2009 17:02:33 -0700 (PDT) Date: Fri, 28 Aug 2009 00:40:00 -0000 From: "H.J. Lu" To: binutils@sources.redhat.com Subject: PATCH: PR ld/10569: -z max-page-size may not work for linker scripts Message-ID: <20090828000233.GA23692@lucon.org> Reply-To: "H.J. Lu" MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.19 (2009-01-05) Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org X-SW-Source: 2009-08/txt/msg00514.txt.bz2 When a linker script change output target with OUTPUT_FORMAT("elf32-i386") and elf32-i386 isn't the default target, -z max-page-size won't work correctly. Here is a patch with 2 testcases. OK to install? Thanks. H.J. ---- ld/ 2009-08-27 H.J. Lu PR ld/10569 * ldlang.c (lang_add_output_format): Call bfd_emul_set_maxpagesize/bfd_emul_set_commonpagesize if maximum/common page sizes are specified and output target isn't the same as default target. ld/testsuite 2009-08-27 H.J. Lu PR ld/10569 * ld-elf/commonpage2.d: New. * ld-elf/maxpage4.d: Likewise. * ld-elf/maxpage4.t: Likewise. Index: ld/testsuite/ld-elf/maxpage4.d =================================================================== --- ld/testsuite/ld-elf/maxpage4.d (revision 0) +++ ld/testsuite/ld-elf/maxpage4.d (revision 0) @@ -0,0 +1,9 @@ +#source: maxpage1.s +#as: --32 +#ld: -z max-page-size=0x200000 -T maxpage4.t +#readelf: -l --wide +#target: x86_64-*-linux* + +#... + LOAD+.*0x200000 +#pass Index: ld/testsuite/ld-elf/maxpage4.t =================================================================== --- ld/testsuite/ld-elf/maxpage4.t (revision 0) +++ ld/testsuite/ld-elf/maxpage4.t (revision 0) @@ -0,0 +1,9 @@ +OUTPUT_FORMAT("elf32-i386") +OUTPUT_ARCH(i386) +ENTRY(_start) +SECTIONS +{ + .text : {*(.text)} + .data : {*(.data)} + /DISCARD/ : {*(*)} +} Index: ld/testsuite/ld-elf/commonpage2.d =================================================================== --- ld/testsuite/ld-elf/commonpage2.d (revision 0) +++ ld/testsuite/ld-elf/commonpage2.d (revision 0) @@ -0,0 +1,9 @@ +#source: maxpage1.s +#as: --32 +#ld: -z max-page-size=0x200000 -z common-page-size=0x100000 -T maxpage4.t +#readelf: -l --wide +#target: x86_64-*-linux* + +#... + LOAD+.*0x200000 +#pass Index: ld/ldlang.c =================================================================== --- ld/ldlang.c (revision 6600) +++ ld/ldlang.c (working copy) @@ -6708,6 +6708,20 @@ lang_add_output_format (const char *form format = little; output_target = format; + + /* If maximum/common page sizes are specified, we may need to + set them for OUTPUT_TARGET. */ + if ((config.maxpagesize != 0 || config.commonpagesize != 0) + && strcmp (output_target, default_target) != 0) + { + if (config.maxpagesize != 0) + bfd_emul_set_maxpagesize (output_target, + config.maxpagesize); + + if (config.commonpagesize != 0) + bfd_emul_set_commonpagesize (output_target, + config.commonpagesize); + } } }