[PATCH 1/1] aarch64:fix aarch64_tlsdesc conflict handling

Szabolcs Nagy szabolcs.nagy@arm.com
Fri Nov 6 15:56:00 GMT 2015


On 06/11/15 06:59, Maninder Singh wrote:
> This patch fixes aarch64_tlsdesc conflict handling in
> .gnu.conflict section. This patch is added to support prelink
> on aarch64 architecture.
> http://git.yoctoproject.org/cgit/cgit.cgi/prelink-cross/commit
> /?h=cross_prelink_aarch64&id=2e83ded69171d87b76bcffaeffbd2cdb532663de
>
> Signed-off-by: Vaneet Narang <v.narang@samsung.com>
> Signed-off-by: Maninder Singh <maninder1.s@samsung.com>
> ---
>   sysdeps/aarch64/dl-machine.h |   17 ++++++++++++++---
>   1 files changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h
> index 217e179..70c112d 100644
> --- a/sysdeps/aarch64/dl-machine.h
> +++ b/sysdeps/aarch64/dl-machine.h
> @@ -290,9 +290,20 @@ elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc,
>   #ifndef RTLD_BOOTSTRAP
>   	    if (! sym)
>   	      {
> -		td->arg = (void*)reloc->r_addend;
> -		td->entry = _dl_tlsdesc_undefweak;
> -	      }
> +			ElfW(Rela) * conflict_start = NULL;
> +			ElfW(Rela) * conflict_end = NULL;
> +			if ( l->l_info [ADDRIDX (DT_GNU_CONFLICT)])
> +		      {
> +				conflict_start = (ElfW(Rela) *) map->l_info [ADDRIDX (DT_GNU_CONFLICT)]->d_un.d_ptr;
> +				conflict_end = conflict_start +
> +								map->l_info [VALIDX (DT_GNU_CONFLICTSZ)]->d_un.d_val;
> +		      }
> +			td->arg = (void*)reloc->r_addend;
> +			if(conflict_start <= reloc && conflict_end >= reloc)
> +				td->entry = _dl_tlsdesc_return;
> +			else
> +				td->entry = _dl_tlsdesc_undefweak;

this code could be better organised.
(to have minimal impact on the non-prelinked case, e.g by
leaving the original code alone and moving all the new
special casing behind one if that checks for DT_GNU_CONFLICT.)

isn't it possible to just pass a dummy sym in
_dl_resolve_conflicts so we don't need any special
target specific code?

is x86_64 tlsdesc also broken with prelinking?

who uses prelinking and why? (it has various issues
including defeating security measures..)

> +	      }
>   	    else
>   #endif
>   	      {
>



More information about the Libc-alpha mailing list