On 01/22/2015 05:09 PM, Matthias Klose wrote: > On 01/22/2015 12:56 AM, Andrew Pinski wrote: >> On Wed, Jan 21, 2015 at 8:51 AM, Jakub Jelinek <ja...@redhat.com> wrote: >>> On Wed, Jan 21, 2015 at 08:41:46AM -0800, pins...@gmail.com wrote: >>>>> On Jan 21, 2015, at 1:02 AM, Matthias Klose <d...@ubuntu.com> wrote: >>>>> >>>>> __objc_get_forward_imp and get_imp were exported in libobjc since GCC >>>>> 4.1, for >>>>> some reason these are not exported anymore in GCC 5 (both declared >>>>> inline). So >>>>> either export these as before, or don't export them and bump the soname. >>>>> The >>>>> latter seems to be unwanted, and at least gnustep-base is using the >>>>> get_imp >>>>> function. So better keep the references in GCC 5? >>>>> >>>>> Is this an intended change in GCC 5 to not to export inline methods >>>>> anymore? >>>> >>>> Just remove the inline instead. >>> >>> The comments like: >>> >>> /* The new name of get_imp(). */ >>> IMP >>> class_getMethodImplementation (Class class_, SEL selector) >>> { >>> if (class_ == Nil || selector == NULL) >>> return NULL; >>> >>> /* get_imp is inlined, so we're good. */ >>> return get_imp (class_, selector); >>> } >>> >>> don't make me very confident in such a change. >>> The extern prototypes really work with both -std=gnu89 and -std=gnu11 and >>> thus will at least keep status quo. >> >> Let's do that then. > > get_imp was renamed to class_getMethodImplementation, which is exported from > objc/runtime.h. GNUstep-base uses get_imp to define it's own > class_getMethodImplementation, so get_imp isn't really needed. So either make > the two functions inline, and don't export them, or declare the prototypes. > For > the latter I would suggest objc-private/runtime.h > (class_getMethodImplementation > is declared in objc/runtime.h).
now commited the following patch after approval on IRC. Matthias
libobjc/ 2015-01-27 Matthias Klose <d...@ubuntu.com> * sendmsg.c: Add prototypes for __objc_get_forward_imp and get_imp. Index: libobjc/sendmsg.c =================================================================== --- libobjc/sendmsg.c (revision 220167) +++ libobjc/sendmsg.c (working copy) @@ -104,6 +104,10 @@ struct objc_method * search_for_method_in_list (struct objc_method_list * list, SEL op); id nil_method (id, SEL); +/* Make sure this inline function is exported regardless of GNU89 or C99 + inlining semantics as it is part of the libobjc ABI. */ +extern IMP __objc_get_forward_imp (id, SEL); + /* Given a selector, return the proper forwarding implementation. */ inline IMP @@ -320,6 +324,10 @@ return res; } +/* Make sure this inline function is exported regardless of GNU89 or C99 + inlining semantics as it is part of the libobjc ABI. */ +extern IMP get_imp (Class, SEL); + inline IMP get_imp (Class class, SEL sel)