Hi Waldemar, I have looked into the OpenADK uclibc-tests segmentation fault at hand. Although, I haven't fully tested the patch I think it is a fix for the issue.
Considering how long I took to look into this problem, I decided to provide you a patch immediately for you to try it. BTW, in my case, it fails a little further, but because of some undefined references. Maybe it is not really a problem on the toolchain. Best regards, Cupertino On 01/11/2017 11:40 PM, Waldemar Brodkorb wrote: > Hi, > Vineet Gupta wrote, > >> On 01/11/2017 12:48 PM, Waldemar Brodkorb wrote: >>> I reported the issue to Alexey last year. >>> We added your binutils maintainer to the thread. >>> Yesterday he had again time to reproduce the problem, but there was >>> some missing information I gave him yesterday. >>> >>> So may be you can help with this? >> It is beyond my area of expertise and Cuper is looking into it, it is in good >> hands already ;-) >> >> OTOH the reason I was dabbling into this was to track down tst-getpid2 >> failure on >> ARC as reported in last known reports. >> >> It seems glibc dropped this test and added a new one instead. See commit >> 0cb313f7cb0e41 ("Fix clone (CLONE_VM) pid/tid reset (BZ#19957)") >> >> I tried copying over tst-clone2 into uClibc (with a hdr include adjustment), >> but >> it seems to runtime fail for me very early (atleast in nSIM). >> >> | [ARCLinux]# ./tst-clone2 >> | child pid (62) != received pid/tid (0/1606237724) >> | parent pid (61) != received pid/tid (0/1606237724) >> | [ARCLinux]# random: crng init done >> | echo $? >> | 2 >> >> Can you please double check this for other targets ! > I have yesterday seen this commit > c579f48edba88380635ab98cb612030e3ed8691e in glibc and would > like to follow here and remove any PID/TID caching. > > Afterwards I can take a look into 0cb313f7cb0e41. > >>> It is really blocking any complete regression testing :( >> I know sucks, lets hope Cuper nails it down quickly. > That would be really cool. > > best regards > Waldemar >
diff --git a/bfd/elf32-arc.c b/bfd/elf32-arc.c index fba58cb..d99da93 100644 --- a/bfd/elf32-arc.c +++ b/bfd/elf32-arc.c @@ -70,13 +70,7 @@ name_for_global_symbol (struct elf_link_hash_entry *h) struct dynamic_sections { bfd_boolean initialized; - asection * sgot; - asection * srelgot; - asection * sgotplt; - asection * srelgotplt; asection * sdyn; - asection * splt; - asection * srelplt; }; enum dyn_section_types @@ -1578,13 +1572,7 @@ arc_create_dynamic_sections (bfd * abfd, struct bfd_link_info *info) struct dynamic_sections ds = { .initialized = FALSE, - .sgot = NULL, - .srelgot = NULL, - .sgotplt = NULL, - .srelgotplt = NULL, .sdyn = NULL, - .splt = NULL, - .srelplt = NULL }; htab = elf_hash_table (info); @@ -1592,7 +1580,7 @@ arc_create_dynamic_sections (bfd * abfd, struct bfd_link_info *info) /* Create dynamic sections for relocatable executables so that we can copy relocations. */ - if (! htab->dynamic_sections_created && bfd_link_pic (info)) + if (! htab->dynamic_sections_created) { if (! _bfd_elf_link_create_dynamic_sections (abfd, info)) BFD_ASSERT (0); @@ -1600,18 +1588,6 @@ arc_create_dynamic_sections (bfd * abfd, struct bfd_link_info *info) dynobj = (elf_hash_table (info))->dynobj; - if (dynobj) - { - ds.sgot = htab->sgot; - ds.srelgot = htab->srelgot; - - ds.sgotplt = bfd_get_section_by_name (dynobj, ".got.plt"); - ds.srelgotplt = ds.srelplt; - - ds.splt = bfd_get_section_by_name (dynobj, ".plt"); - ds.srelplt = bfd_get_section_by_name (dynobj, ".rela.plt"); - } - if (htab->dynamic_sections_created) { ds.sdyn = bfd_get_section_by_name (dynobj, ".dynamic"); @@ -1634,10 +1610,20 @@ elf_arc_check_relocs (bfd * abfd, const Elf_Internal_Rela * rel_end; bfd * dynobj; asection * sreloc = NULL; + struct elf_link_hash_table * htab = elf_hash_table (info); if (bfd_link_relocatable (info)) return TRUE; + if (htab->dynobj == NULL) + htab->dynobj = abfd; + + if (! htab->dynamic_sections_created) + { + if (! _bfd_elf_link_create_dynamic_sections (abfd, info)) + return FALSE; + } + dynobj = (elf_hash_table (info))->dynobj; symtab_hdr = &((elf_tdata (abfd))->symtab_hdr); sym_hashes = elf_sym_hashes (abfd); @@ -1659,15 +1645,6 @@ elf_arc_check_relocs (bfd * abfd, } howto = arc_elf_howto (r_type); - if (dynobj == NULL - && (is_reloc_for_GOT (howto) == TRUE - || is_reloc_for_TLS (howto) == TRUE)) - { - dynobj = elf_hash_table (info)->dynobj = abfd; - if (! _bfd_elf_create_got_section (abfd, info)) - return FALSE; - } - /* Load symbol information. */ r_symndx = ELF32_R_SYM (rel->r_info); if (r_symndx < symtab_hdr->sh_info) /* Is a local symbol. */
_______________________________________________ devel mailing list devel@uclibc-ng.org http://mailman.uclibc-ng.org/cgi-bin/mailman/listinfo/devel