Re: [Gc] gc, guile, and NetBSD
Ivan Maidanski <ivmai-JGs/[email protected]> Sun, 02 Nov 2014 10:54:52 +0300
| Newsgroups | gmane.comp.programming.garbage-collection.boehmgc |
|---|---|
| Message-ID | <[email protected]> |
Hi Thomas, Merged to master: https://github.com/ivmai/bdwgc/commit/8f6f15858cd5ae6c4f7fb6da935f8276632413cc (I will copy it to release-7_4 later.) Thank you Wed, 29 Oct 2014 18:01:45 +0100 from Thomas Klausner <[email protected]>: >Hi Enami-san! > >On Wed, Oct 29, 2014 at 01:06:59PM +0900, [email protected] wrote: >> Hi, >> >> Thomas Klausner < [email protected] > writes: >> >> > The guile build fails with: >> > >> > GEN guile-procedures.texi >> > GC_is_visible test failed >> > [1] Broken pipe cat alist.doc ar... | >> > Abort trap (core dumped) GUILE_INSTALL_LO... >> >> Current GC_FirstDLOpenedLinkMap() for NetBSD calls dlinfo(RTLD_SELF, >> RTLD_DI_LINKMAP, &lm) to find link_map. So it will find link_map of >> libgc. >> >> With guile's case, libgc is link to libguile and libguile is linked to >> the guile command, so libgc is not the first one in the link_map chain. >> >> That's why, data section of libguile, where scm_protects exists, isn't >> added to GC root and GC_is_visible fails. >> >> The attaced patch works for me. > >Thank you very much! > >I can confirm that this patch makes guile2 build for me. > >Can this patch please integrated into gc? > Thomas > >> >> enami. > >> --- dyn_load.c.orig 2014-06-03 15:08:02.000000000 +0900 >> +++ dyn_load.c 2014-10-29 13:02:43.000000000 +0900 >> @@ -687,8 +687,16 @@ >> if( cachedResult == 0 ) { >> # if defined(NETBSD) && defined(RTLD_DI_LINKMAP) >> struct link_map *lm = NULL; >> - if (!dlinfo(RTLD_SELF, RTLD_DI_LINKMAP, &lm)) >> - cachedResult = lm; >> + if (!dlinfo(RTLD_SELF, RTLD_DI_LINKMAP, &lm) && lm != NULL) { >> + /* >> + * Now, lm points link_map object of libgc. Since it >> + * might not be the first dynamically linked object, >> + * try to find it (object next to the main object). >> + */ >> + while (lm->l_prev) >> + lm = lm->l_prev; >> + cachedResult = lm->l_next; >> + } >> # else >> int tag; >> for( dp = _DYNAMIC; (tag = dp->d_tag) != 0; dp++ ) { >_______________________________________________ >bdwgc mailing list >[email protected] >https://lists.opendylan.org/mailman/listinfo/bdwgc _______________________________________________ bdwgc mailing list [email protected] https://lists.opendylan.org/mailman/listinfo/bdwgc