On 11 March 2014 20:51, Claudio Fontana <hw.clau...@gmail.com> wrote:

Hi Claudio,

> I am building an ELF image using aarch64-linux-gnu-ld from linaro:
>
> GNU ld (crosstool-NG linaro-1.13.1-4.8-2014.02 - Linaro GCC 2014.02)
> 2.24.0.20131220
>
> I am linking in the libstc++.a, which contains in particular a GOT
> entry for __gthread_active_ptr that is of interest to me, pointing to
> __pthread_key_create, used for detecting pthread support for
> std::thread,
>
> and while I get the relocations for the GOT itself in a .rela.dyn
> section, and a nice pointer to it from the dynamic section (RELA), the
> dynamic RELASZ entry contains zero:
>
> Here is the comparison of the Dynamic section (note RELASZ) with the
> following .rela.dyn relocations:
>
> loader.elf:     file format elf64-littleaarch64
> loader.elf
> architecture: aarch64, flags 0x00000112:
> EXEC_P, HAS_SYMS, D_PAGED
> start address 0x00000000400b0000
>
> Program Header:
>     LOAD off    0x0000000000000000 vaddr 0x0000000040090000 paddr
> 0x0000000040090000 align 2**16
>          filesz 0x0000000000407084 memsz 0x00000000004aa504 flags rwx
>      TLS off    0x0000000000407080 vaddr 0x0000000040497080 paddr
> 0x0000000040497080 align 2**3
>          filesz 0x0000000000000004 memsz 0x0000000000000580 flags rw-
>  DYNAMIC off    0x0000000000001000 vaddr 0x0000000040091000 paddr
> 0x0000000040091000 align 2**3
>          filesz 0x0000000000000120 memsz 0x0000000000000120 flags rw-
> EH_FRAME off    0x00000000003ce5fc vaddr 0x000000004045e5fc paddr
> 0x000000004045e5fc align 2**2
>          filesz 0x000000000000bae4 memsz 0x000000000000bae4 flags r--
>     NOTE off    0x0000000000000000 vaddr 0x0000000000000000 paddr
> 0x0000000000000000 align 2**3
>          filesz 0x0000000000000000 memsz 0x0000000000000000 flags ---
>
> Dynamic Section:
>   NEEDED               dummy-shlib.so
>   INIT_ARRAY           0x00000000404841b8
>   INIT_ARRAYSZ         0x0000000000000330
>   HASH                 0x000000004044bd58
>   STRTAB               0x00000000403e3320
>   SYMTAB               0x00000000403a4110
>   STRSZ                0x0000000000068a33
>   SYMENT               0x0000000000000018
>   DEBUG                0x0000000000000000
>   RELA                 0x00000000404780c0
>   RELASZ               0x0000000000000000
>   RELAENT              0x0000000000000018
> private flags = 0:
>
> ...
>  10 .rela.dyn     00002058  00000000404780c0  00000000404780c0  003e80c0  2**3
>                   CONTENTS, ALLOC, LOAD, READONLY, DATA
> ...
> and now the .rela.dyn.relocations from aarch64-linux-gnu-readelf -r
> loader.elf :
>
> Relocation section '.rela.dyn' at offset 0x3e80c0 contains 345 entries:
>   Offset          Info           Type           Sym. Value    Sym. Name + 
> Addend
> 0000404832d0  002b00000401 R_AARCH64_GLOB_DA 00000000405339c8
> _ZNSt8time_getIwSt19is + 0
> 0000404832d8  004400000401 R_AARCH64_GLOB_DA 000000004047e450
> _ZTISt7codecvtIcc11__m + 0
> 0000404832e0  004b00000401 R_AARCH64_GLOB_DA 00000000405338c8
> _ZGVNSt8numpunctIcE2id + 0
> 0000404832e8  005800000401 R_AARCH64_GLOB_DA 000000004047c460
> _ZTISt8messagesIcE + 0
> 0000404832f0  006200000401 R_AARCH64_GLOB_DA 000000004047df40
> _ZTVSt9strstream + 0
> 0000404832f8  007200000401 R_AARCH64_GLOB_DA 00000000402870dc
> _ZNSt17bad_function_ca + 0
> 000040483300  008500000401 R_AARCH64_GLOB_DA 0000000040534e58
> _ZGVN9__gnu_cxx16bitma + 0
> 000040483310  00c300000401 R_AARCH64_GLOB_DA 0000000040533a18
> _ZNSt6locale2id11_S_re + 0
> 000040483318  00dd00000401 R_AARCH64_GLOB_DA 000000004047c160
> _ZTISt5ctypeIwE + 0
> 000040483320  00ea00000401 R_AARCH64_GLOB_DA 0000000040534e18
> _ZZN9__gnu_cxx9free_li + 0
> 000040483328  011700000401 R_AARCH64_GLOB_DA 0000000040533968
> _ZGVNSt8time_getIwSt19 + 0
> 000040483330  013500000401 R_AARCH64_GLOB_DA 000000004047cfd8
> _ZTISt7num_getIwSt19is + 0
> 000040483338  017300000401 R_AARCH64_GLOB_DA 000000004021d51c
> __pthread_key_create + 0
>
> ...
>
> ^^...note the __pthread_key_create relocation I am interested in...
>
> I would expect the RELASZ in the dynamic section to be 0x2058 instead of 0.
>
> Any tips to what could be wrong?

I can't see any obvious way this could happen from looking at the
linker code. Do you have a method for reproducing the problem you
could share? Or could you send me the binary?

Thanks,


-- 
Will Newton
Toolchain Working Group, Linaro

_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to