On Apr 7, 2016 11:33, "Jean-Philippe André" <[email protected]> wrote:
>
> On 7 April 2016 at 14:53, Jean-Philippe André <[email protected]> wrote:
>
> > Hi,
> >
> > On 7 April 2016 at 14:49, Jean-Philippe ANDRÉ <[email protected]> wrote:
> >
> >> jpeg pushed a commit to branch master.
> >>
> >>
> >>
http://git.enlightenment.org/core/efl.git/commit/?id=4e4b42ec036b1bda45879c1c4141b56106546373
> >>
> >> commit 4e4b42ec036b1bda45879c1c4141b56106546373
> >> Author: Jean-Philippe Andre <[email protected]>
> >> Date:   Thu Apr 7 14:40:10 2016 +0900
> >>
> >>     Efl: Add internal strong symbol to fix build on GCC < 5.3
> >>
> >>     This fixes a crash in ecore_init, calling a weak function from
> >>     libefl that was resolved to NULL.
> >>
> >>     So, here's a fun thing happening with GCC < 5.3. Since a1a506e13e2
> >>     all EOAPI and EO class_get() functions are weak symbols. This means
> >>     that all APIs inside libefl.so are weak.
> >>
> >>     As a result, gcc linker with --as-needed skipped linking to libefl
> >>     since not a single strong symbol from libefl was required by
> >>     libecore. This is actually a bug in gcc linker since we do in fact
> >>     use symbols from libefl, just weak ones.
> >>
> >>     GCC 5.3 seems to be fixed, so people with GCC 5.3+ will not
> >>     experience any build/runtime issue. The current patch is
> >>     a workaround that bug, by artifically creating a strong symbol
> >>     required by ecore.
> >>
> >>     Other libraries than ecore might also need to call
> >>     __efl_internal_init, if they end up not being linked to libefl.
> >>
> >
> >
> > This should fix the build for Ubuntu users.
> >
> > For more information, refer to this thread:
> > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=32511
> >
>
> Oops, this thread:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=32219
>
> Although it's not exactly the same situation as ours, since our weak
> symbols are visible, not hidden.
>
>
> >
> >

Thanks for fixing this. ☺
> >
> >
> >> ---
> >>  src/lib/ecore/ecore.c                        | 3 +++
> >>  src/lib/efl/Efl.h                            | 3 +++
> >>  src/lib/efl/interfaces/efl_interfaces_main.c | 6 ++++++
> >>  3 files changed, 12 insertions(+)
> >>
> >> diff --git a/src/lib/ecore/ecore.c b/src/lib/ecore/ecore.c
> >> index d7eead3..6c326a7 100644
> >> --- a/src/lib/ecore/ecore.c
> >> +++ b/src/lib/ecore/ecore.c
> >> @@ -210,6 +210,9 @@ ecore_init(void)
> >>     if (++_ecore_init_count != 1)
> >>       return _ecore_init_count;
> >>
> >> +   /* make sure libecore is linked to libefl - workaround gcc bug */
> >> +   __efl_internal_init();
> >> +
> >>     setlocale(LC_CTYPE, "");
> >>     /*
> >>        if (strcmp(nl_langinfo(CODESET), "UTF-8"))
> >> diff --git a/src/lib/efl/Efl.h b/src/lib/efl/Efl.h
> >> index 2002ebc..4cc909a 100644
> >> --- a/src/lib/efl/Efl.h
> >> +++ b/src/lib/efl/Efl.h
> >> @@ -119,6 +119,9 @@ typedef Efl_Gfx_Path_Command_Type
> >> Efl_Gfx_Path_Command;
> >>
> >>  #endif
> >>
> >> +/* work-around bug in gcc --as-needed link optimization */
> >> +EAPI void __efl_internal_init(void);
> >> +
> >>  #if defined ( __cplusplus )
> >>  }
> >>  #endif
> >> diff --git a/src/lib/efl/interfaces/efl_interfaces_main.c
> >> b/src/lib/efl/interfaces/efl_interfaces_main.c
> >> index 908e228..68ff6f3 100644
> >> --- a/src/lib/efl/interfaces/efl_interfaces_main.c
> >> +++ b/src/lib/efl/interfaces/efl_interfaces_main.c
> >> @@ -37,3 +37,9 @@ EAPI const Eo_Event_Description
_EFL_GFX_PATH_CHANGED =
> >>  #include "interfaces/efl_animator.eo.c"
> >>  #include "interfaces/efl_orientation.eo.c"
> >>  #include "interfaces/efl_flip.eo.c"
> >> +
> >> +EAPI void
> >> +__efl_internal_init(void)
> >> +{
> >> +   /* nothing to do, the symbol only is required for link to work */
> >> +}
> >>
> >> --
> >>
> >>
> >>
> >
> >
> > --
> > Jean-Philippe André
> >
>
>
>
> --
> Jean-Philippe André
>
------------------------------------------------------------------------------
> _______________________________________________
> enlightenment-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
------------------------------------------------------------------------------
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to