This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Hi! I'm getting segfaults in __deregister_frame_info in the attached testcase. The issue is that on dlclose(finimod1) in main, in _dl_close finimod1's map l_initfini[0] == list[0] == finimod1, but l_initfini[1] = finimod2 while list[1] == pthread, l_initfini[2] == pthread while list[2] == finimod2 pthread has the DF_1_NODELETE flag set, so during dlclose() we call finimod1's FINI, skip calling finimod2's FINI and call pthread's FINI (it is DF_1_NODELETE, so we should not). This patch seems to fix it. Thanks to Bill Nottingham who worked on this as well. 2000-10-05 Jakub Jelinek <jakub@redhat.com> * elf/dl-close.c (_dl_close): Check imap's l_flags_1 for DF_1_NODELETE, not list[i]'s. --- libc/elf/dl-close.c.jj Fri Sep 29 12:56:56 2000 +++ libc/elf/dl-close.c Thu Oct 5 13:53:34 2000 @@ -95,7 +95,7 @@ _dl_close (void *_map) struct link_map *imap = map->l_initfini[i]; if (imap->l_opencount == 1 && imap->l_type == lt_loaded && (imap->l_info[DT_FINI] || imap->l_info[DT_FINI_ARRAY]) - && ! (list[i]->l_flags_1 & DF_1_NODELETE) + && ! (imap->l_flags_1 & DF_1_NODELETE) /* Skip any half-cooked objects that were never initialized. */ && imap->l_init_called) { Jakub
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |