This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [ Bug 16340][AARCH64][PATCH] Offset into GOT for TLS relocation computed inconsistently


On Fri, Dec 20, 2013 at 07:32:15PM +1100, Kugan wrote:
> [Apologies if you get this twice; Noticed a typo with email address]
> 
> Hi,
> 
> mongodb for aarch64 segfaults due to an error in applying GOT for TLS
> relocation. Michael Hudson-Doyle tracked this down to wrong usage of
> offset for the relocation. Attached patch (by Michael Hudson-Doyle)
> fixes this. Regression tested on aarch64-none-linux-gnu with no new
> regressions.
> 
> Is this OK for trunk and backport for 2.24?

Looks good to me.  There are two more occurrences of 
output_section->output_offset in elfnn-aarch64.c.  Please fix those
too.

> bfd/
> +2013-12-19  Michael Hudson-Doyle  <michael.hudson@linaro.org>
> +
> +	* elfnn-aarch64.c (elfNN_aarch64_final_link_relocate): Use correct
> +	offset for GOT in TLS while calculating relocation address.
> +
> 

> diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c
> index 8f0e716..e1ab769 100644
> --- a/bfd/elfnn-aarch64.c
> +++ b/bfd/elfnn-aarch64.c
> @@ -3831,7 +3831,7 @@ elfNN_aarch64_final_link_relocate (reloc_howto_type *howto,
>  
>        value = (symbol_got_offset (input_bfd, h, r_symndx)
>  	       + globals->root.sgot->output_section->vma
> -	       + globals->root.sgot->output_section->output_offset);
> +	       + globals->root.sgot->output_offset);
>  
>        value = _bfd_aarch64_elf_resolve_relocation (bfd_r_type, place, value,
>  						   0, weak_undef_p);
> @@ -3863,7 +3863,7 @@ elfNN_aarch64_final_link_relocate (reloc_howto_type *howto,
>  
>        value = (symbol_tlsdesc_got_offset (input_bfd, h, r_symndx)
>  	       + globals->root.sgotplt->output_section->vma
> -	       + globals->root.sgotplt->output_section->output_offset
> +	       + globals->root.sgotplt->output_offset
>  	       + globals->sgotplt_jump_table_size);
>  
>        value = _bfd_aarch64_elf_resolve_relocation (bfd_r_type, place, value,

-- 
Alan Modra
Australia Development Lab, IBM


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]