From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17019 invoked by alias); 12 Jun 2009 13:19:54 -0000 Received: (qmail 17008 invoked by uid 22791); 12 Jun 2009 13:19:52 -0000 X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from eu1sys200aog118.obsmtp.com (HELO eu1sys200aog118.obsmtp.com) (207.126.144.145) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 12 Jun 2009 13:19:45 +0000 Received: from source ([164.129.1.35]) (using TLSv1) by eu1sys200aob118.postini.com ([207.126.147.11]) with SMTP ID DSNKSjJV6R7BL030l2FO9/fdz/whsFlWjbyu@postini.com; Fri, 12 Jun 2009 13:19:45 UTC Received: from zeta.dmz-eu.st.com (ns2.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 14097242; Fri, 12 Jun 2009 13:19:21 +0000 (GMT) Received: from mail2.gnb.st.com (mail2.gnb.st.com [164.129.119.59]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id BDA114C231; Fri, 12 Jun 2009 13:19:21 +0000 (GMT) Received: from [164.129.122.46] (gnx2504.gnb.st.com [164.129.122.46]) by mail2.gnb.st.com (MOS 3.8.7a) with ESMTP id DDT02262 (AUTH lyon); Fri, 12 Jun 2009 15:19:47 +0200 (CEST) Message-ID: <4A3255D9.9030906@st.com> Date: Fri, 12 Jun 2009 13:19:00 -0000 From: Christophe LYON User-Agent: Thunderbird 2.0.0.21 (X11/20090302) MIME-Version: 1.0 To: Nick Clifton , Phil Blundell Cc: binutils@sourceware.org Subject: Re: linker crash in arm stub generation References: <1244740179.21585.119.camel@mill.internal.reciva.com> <4A324BAC.7090702@redhat.com> In-Reply-To: <4A324BAC.7090702@redhat.com> Content-Type: multipart/mixed; boundary="------------090708080805060908020305" X-IsSubscribed: yes 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-06/txt/msg00189.txt.bz2 This is a multi-part message in MIME format. --------------090708080805060908020305 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 807 Hi Phil and Nick, On 12.06.2009 14:35, Nick Clifton wrote: > Hi Phil, > >> This testcase causes the linker (CVS head from a couple of days ago, >> arm-linuxgnueabi target) to segfault in arm_build_one_stub(): > > Please could you open a bug report for this bug ? > > Once you have done that, please try out this patch which I think should > solve the problem. > I think your patch is not adequate: it will prevent the stub code from being generated, but the user code will still jump to the stub. So the link won't fail, but the result will be wrong. Instead, I propose this patch, which prevents mode-switching stub generation when the call goes through a PLT entry. I think there should already be a test for this in the testsuite, I have probably forgotten this configuration. Christophe. --------------090708080805060908020305 Content-Type: text/plain; name="elf32-arm.c.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="elf32-arm.c.patch" Content-length: 1079 Index: bfd/elf32-arm.c =================================================================== RCS file: /cvs/src/src/bfd/elf32-arm.c,v retrieving revision 1.196 diff -p -c -u -r1.196 elf32-arm.c --- bfd/elf32-arm.c 22 May 2009 11:58:44 -0000 1.196 +++ bfd/elf32-arm.c 12 Jun 2009 13:18:20 -0000 @@ -3175,11 +3175,15 @@ arm_type_of_stub (struct bfd_link_info * /* We have an extra 2-bytes reach because of the mode change (bit 24 (H) of BLX encoding). */ + /* A stub is needed only if this call is not throught a PLT + entry, because PLT stubs handle mode switching + already. */ if (branch_offset > (ARM_MAX_FWD_BRANCH_OFFSET + 2) || (branch_offset < ARM_MAX_BWD_BRANCH_OFFSET) - || ((r_type == R_ARM_CALL) && !globals->use_blx) - || (r_type == R_ARM_JUMP24) - || (r_type == R_ARM_PLT32)) + || ( (((r_type == R_ARM_CALL) && !globals->use_blx) + || (r_type == R_ARM_JUMP24) + || (r_type == R_ARM_PLT32)) + && !use_plt)) { stub_type = (info->shared | globals->pic_veneer) /* PIC stubs. */ --------------090708080805060908020305--