[Gc] There should be a library major bump of gc library due to now having several GC_xyz "hidden" functions

Paulo César Pereira de Andrade paulo.cesar.pereira.de.andrade at gmail.com
Sat May 26 13:18:48 PDT 2012


2012/5/26 Ivan Maidanski <ivmai at mail.ru>:
> Hi  Paulo,

  Hi Ivan,

> Sat, 26 May 2012 15:22:11 -0300 Paulo César Pereira de Andrade<paulo.cesar.pereira.de.andrade at gmail.com>:
>>   I understand that those functions are in gc_priv.h, but at least
>> ecl became broken in Fedora 17 and rawhide due to the new GC_INNER
>> that causes those functions to have
>> __attribute__((__visibility__("hidden")))
>
> Could you please mention what are the exact symbols you are talking about?

  In ecl build it lists these:

libeclmin.a(alloc_2.o): In function `ecl_mark_env':
/home/pcpa/rpmbuild/BUILD/ecl-12.2.1/src/c/alloc_2.d:1273: undefined
reference to `GC_push_conditional'
/home/pcpa/rpmbuild/BUILD/ecl-12.2.1/src/c/alloc_2.d:1274: undefined
reference to `GC_set_mark_bit'
/home/pcpa/rpmbuild/BUILD/ecl-12.2.1/src/c/alloc_2.d:1277: undefined
reference to `GC_push_conditional'
/home/pcpa/rpmbuild/BUILD/ecl-12.2.1/src/c/alloc_2.d:1278: undefined
reference to `GC_set_mark_bit'
/home/pcpa/rpmbuild/BUILD/ecl-12.2.1/src/c/alloc_2.d:1281: undefined
reference to `GC_push_conditional'
/home/pcpa/rpmbuild/BUILD/ecl-12.2.1/src/c/alloc_2.d:1282: undefined
reference to `GC_set_mark_bit'
libeclmin.a(alloc_2.o): In function `stacks_scanner':
/home/pcpa/rpmbuild/BUILD/ecl-12.2.1/src/c/alloc_2.d:1305: undefined
reference to `GC_push_conditional'
/home/pcpa/rpmbuild/BUILD/ecl-12.2.1/src/c/alloc_2.d:1306: undefined
reference to `GC_set_mark_bit'
/home/pcpa/rpmbuild/BUILD/ecl-12.2.1/src/c/alloc_2.d:1310: undefined
reference to `GC_push_all'
/home/pcpa/rpmbuild/BUILD/ecl-12.2.1/src/c/alloc_2.d:1311: undefined
reference to `GC_push_all'
libeclmin.a(alloc_2.o): In function `init_alloc':
/home/pcpa/rpmbuild/BUILD/ecl-12.2.1/src/c/alloc_2.d:1034: undefined
reference to `GC_push_other_roots'
libeclmin.a(alloc_2.o): In function `ecl_mark_env':
/home/pcpa/rpmbuild/BUILD/ecl-12.2.1/src/c/alloc_2.d:1292: undefined
reference to `GC_push_all'
collect2: error: ld returned 1 exit status

> We could remove GC_INNER for some private symbols in gc-7.2 (and probably move these symbols to 7.3+ API if desired).

  I reported the problem some weeks ago to ecl upstream, while working in yet
another problem, and updating to gc-7.2 in the meantime. But do not know how
ecl upstream will handle it. But there may be other packages where the problem
is yet to be found.

> The alternate solution is to remove GC_DLL from configure (only for gc-7.2) thus disabling symbols hiding.
>
>>
>>   I made a Fedora RFE for gc, adding a new patch, at
>> https://bugzilla.redhat.com/show_bug.cgi?id=825473
>> where the patch changes GC_INNER to __attribute__((deprecated))
>>
>>   A side effect is that during the gc package build, there will
>> be several warnings about it calling deprecated functions.
>
> In my opinion, not a good idea (due to the mentioned side effect).

  To remove the warning some source change would be required, but
should be a good compromise until a gc release with a library major
bump, to give developers using those interfaces time to adapt, and
not break existing binaries. The initial report I did for Fedora is
https://bugzilla.redhat.com/show_bug.cgi?id=822296

> Regards,
> Ivan
>
>>
>>   This of course will not magically make things work, but with a
>> library major bump at some point it would make it easier to have
>> two libraries coexisting, and in the meantime, people would be
>> warned about the functions being "deprecated".

Thanks,
Paulo



More information about the Gc mailing list