[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