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