From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10125 invoked by alias); 25 Aug 2009 22:14:50 -0000 Received: (qmail 10115 invoked by uid 22791); 25 Aug 2009 22:14:49 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from NaN.false.org (HELO nan.false.org) (208.75.86.248) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 25 Aug 2009 22:14:42 +0000 Received: from nan.false.org (localhost [127.0.0.1]) by nan.false.org (Postfix) with ESMTP id 31D5710661; Tue, 25 Aug 2009 22:14:40 +0000 (GMT) Received: from caradoc.them.org (209.195.188.212.nauticom.net [209.195.188.212]) by nan.false.org (Postfix) with ESMTP id 03DB21065D; Tue, 25 Aug 2009 22:14:39 +0000 (GMT) Received: from drow by caradoc.them.org with local (Exim 4.69) (envelope-from ) id 1Mg4Hh-0002DV-Lv; Tue, 25 Aug 2009 18:14:33 -0400 Date: Wed, 26 Aug 2009 03:11:00 -0000 From: Daniel Jacobowitz To: Christophe LYON , binutils@sourceware.org Subject: Re: Fix Thumb-2 shared libraries Message-ID: <20090825221433.GA8465@caradoc.them.org> Mail-Followup-To: Christophe LYON , binutils@sourceware.org References: <4A3255D9.9030906@st.com> <20090612140642.GA31950@caradoc.them.org> <4A32626C.8090407@st.com> <4A3658C4.3000800@st.com> <20090615175935.GA22200@caradoc.them.org> <4A390CF5.3000505@st.com> <20090617162337.GA9315@caradoc.them.org> <4A3A4DEF.5070704@st.com> <4A3A4E62.8030603@st.com> <20090825185158.GA2712@caradoc.them.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20090825185158.GA2712@caradoc.them.org> User-Agent: Mutt/1.5.20 (2009-06-14) 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-08/txt/msg00466.txt.bz2 On Tue, Aug 25, 2009 at 02:51:58PM -0400, Daniel Jacobowitz wrote: > Here's a patch I'm testing for this failure. This time, the whole patch. -- Daniel Jacobowitz CodeSourcery 2009-08-25 Daniel Jacobowitz bfd/ * elf32-arm.c (elf32_arm_final_link_relocate): Set sym_flags for the mode of target PLT entries. (allocate_dynrelocs): Only adjust symbol type if setting its value. 2009-08-25 Daniel Jacobowitz ld/testsuite/ * ld-arm/farcall-mixed-lib.d: Update. Index: ld/testsuite/ld-arm/farcall-mixed-lib.d =================================================================== --- ld/testsuite/ld-arm/farcall-mixed-lib.d (revision 259133) +++ ld/testsuite/ld-arm/farcall-mixed-lib.d (working copy) @@ -39,9 +39,9 @@ Disassembly of section .text: .* : .*: f000 e80e blx 1000350 <__app_func_from_thumb> - .*: f000 e818 blx 1000368 <__app_func_weak_from_thumb> - .*: f000 e810 blx 100035c <__lib_func3_from_thumb> - .*: f000 e81a blx 1000374 <__lib_func4_from_thumb> + .*: f000 e81a blx 100036c <__app_func_weak_from_thumb> + .*: f000 e810 blx 100035c <__lib_func3_veneer> + .*: f000 e81c blx 1000378 <__lib_func4_from_thumb> .*: 4770 bx lr .*: 46c0 nop ; \(mov r8, r8\) .*: 46c0 nop ; \(mov r8, r8\) @@ -56,20 +56,21 @@ Disassembly of section .text: .*: e08ff00c add pc, pc, ip .*: feffff84 .word 0xfeffff84 -.* <__lib_func3_from_thumb>: - .*: e59fc000 ldr ip, \[pc, #0\] ; 1000364 <__lib_func3_from_thumb\+0x8> - .*: e08ff00c add pc, pc, ip - .*: feffff90 .word 0xfeffff90 +.* <__lib_func3_veneer>: + .*: e59fc004 ldr ip, \[pc, #4\] ; 1000368 <__lib_func3_veneer\+0xc> + .*: e08fc00c add ip, pc, ip + .*: e12fff1c bx ip + .*: feffff91 .word 0xfeffff91 .* <__app_func_weak_from_thumb>: - .*: e59fc000 ldr ip, \[pc, #0\] ; 1000370 <__app_func_weak_from_thumb\+0x8> + .*: e59fc000 ldr ip, \[pc, #0\] ; 1000374 <__app_func_weak_from_thumb\+0x8> .*: e08ff00c add pc, pc, ip - .*: feffff78 .word 0xfeffff78 + .*: feffff74 .word 0xfeffff74 .* <__lib_func4_from_thumb>: - .*: e59fc000 ldr ip, \[pc, #0\] ; 100037c <__lib_func4_from_thumb\+0x8> + .*: e59fc000 ldr ip, \[pc, #0\] ; 1000380 <__lib_func4_from_thumb\+0x8> .*: e08ff00c add pc, pc, ip - .*: feffff84 .word 0xfeffff84 + .*: feffff80 .word 0xfeffff80 ... .* : Index: bfd/elf32-arm.c =================================================================== --- bfd/elf32-arm.c (revision 259133) +++ bfd/elf32-arm.c (working copy) @@ -7330,6 +7330,9 @@ elf32_arm_final_link_relocate (reloc_how + splt->output_offset + h->plt.offset); *unresolved_reloc_p = FALSE; + /* The PLT entry is in ARM mode, regardless of the + target function. */ + sym_flags = STT_FUNC; } /* A branch to an undefined weak symbol is turned into a @@ -7756,10 +7759,14 @@ elf32_arm_final_link_relocate (reloc_how /* If the Thumb BLX instruction is available, convert the BL to a BLX instruction to call the ARM-mode PLT entry. */ lower_insn = (lower_insn & ~0x1000) | 0x0800; + sym_flags = STT_FUNC; } else - /* Target the Thumb stub before the ARM PLT entry. */ - value -= PLT_THUMB_STUB_SIZE; + { + /* Target the Thumb stub before the ARM PLT entry. */ + value -= PLT_THUMB_STUB_SIZE; + sym_flags = STT_ARM_TFUNC; + } *unresolved_reloc_p = FALSE; } @@ -11753,13 +11760,13 @@ allocate_dynrelocs (struct elf_link_hash { h->root.u.def.section = s; h->root.u.def.value = h->plt.offset; - } - /* Make sure the function is not marked as Thumb, in case - it is the target of an ABS32 relocation, which will - point to the PLT entry. */ - if (ELF_ST_TYPE (h->type) == STT_ARM_TFUNC) - h->type = ELF_ST_INFO (ELF_ST_BIND (h->type), STT_FUNC); + /* Make sure the function is not marked as Thumb, in case + it is the target of an ABS32 relocation, which will + point to the PLT entry. */ + if (ELF_ST_TYPE (h->type) == STT_ARM_TFUNC) + h->type = ELF_ST_INFO (ELF_ST_BIND (h->type), STT_FUNC); + } /* Make room for this entry. */ s->size += htab->plt_entry_size;