On 10/24/2018 07:11 AM, Evgeniy Didin wrote:
> [1] fixes clash of TLS variables on ARC and since LD now calculates 
> relocations
> a bit different now we need to update dynamic loader as well otherwise relocs
> will be calculated improperly.
>
> Note this is an ABI change and should go in-line with corresponding ARC tools.
> That said either arc-2018.09 (to be released in few weeks) or the next 
> version of upstream
> Binutils (2.32) are required for normal TLS work on ARC.
>
> Testcase:
> ----------------------------------8<-------------------------------
> #include <stdio.h>
> int foo3(void);
> int foo1(void);
>
> #ifdef _SHARED
> int foo1(){
>       static __thread int val3=1;
>       val3 += 2;
>       return val3;
> }
>
> #elif _SHARED2
> int foo3(){
>       static __thread int val2=0;
>       val2 += 2;
>       return val2;
> }
> #else
> int main(){
>       printf("foo1 = %d \n", foo1());
>       printf("foo3 = %d \n", foo3());
>       return 0;
> }
> #endif
> --------------------------------->8---------------------------------------
>
> The result shoud be:
> ----8<----
> foo1 = 3
> foo3 = 2
> ---->8----
>
> Commands to build artefacts:
> ----------------------------------------8<-------------------------------
> arc-linux-gcc -fPIE -ffunction-sections  -fdata-sections  -pthread  -Os \
>        -fPIC -o testtls.o -D_SHARED -c tst.c
> arc-linux-gcc -fPIE -ffunction-sections  -fdata-sections  -pthread  -Os \
>        -fPIC -o testtls2.o -D_SHARED2 -c tst.c
> arc-linux-gcc  -shared -o libtesttls.so  testtls.o testtls2.o -lm -Os
> arc-linux-gcc tst.c  -o tst.out -L./ -ltesttls -Os -fPIE
> --------------------------------->8---------------------------------------
>
> Add path to libtesttls.so file to LD_LIBRARY_PATH before runnig
> tst.out application.
>
> [1] 
> https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=714e9a954a2e4123dcb26bb8da850e1344de4f5f
>
> Signed-off-by: Alexey Brodkin <abrod...@synopsys.com>
> Signed-off-by: Evgeniy Didin <di...@synopsys.com>
> CC: Cupertino Miranda <cmira...@synopsys.com>
> CC: Vineet Gupta <vgu...@synopsys.com>

Acked-by: Vineet Gupta <vgu...@synopsys.com>

> CC: Waldemar Brodkorb <w...@uclibc-ng.org>
> ---
>  ldso/ldso/arc/elfinterp.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/ldso/ldso/arc/elfinterp.c b/ldso/ldso/arc/elfinterp.c
> index a30c19bcb..61029185f 100644
> --- a/ldso/ldso/arc/elfinterp.c
> +++ b/ldso/ldso/arc/elfinterp.c
> @@ -165,7 +165,7 @@ _dl_do_reloc(struct elf_resolve *tpnt, struct 
> r_scope_elem *scope,
>               *reloc_addr = tls_tpnt->l_tls_modid;
>               break;
>       case R_ARC_TLS_DTPOFF:
> -             *reloc_addr = symbol_addr;
> +             *reloc_addr += symbol_addr;
>               break;
>       case R_ARC_TLS_TPOFF:
>               CHECK_STATIC_TLS ((struct link_map *) tls_tpnt);

_______________________________________________
devel mailing list
devel@uclibc-ng.org
https://mailman.uclibc-ng.org/cgi-bin/mailman/listinfo/devel

Reply via email to