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