From b3722c05f903f417467eb8d3559b633ce868fd8c Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Wed, 16 Aug 2017 14:06:51 +0900 Subject: [PATCH] evas: Fix crash with filters Since the EO APIs are defined as weak symbols, invalid definitions of EAPI lead to runtime crashes on non-public APIs. This is a fix following a series of changes wrt. EAPI definitions. --- src/Makefile_Evas.am | 2 ++ .../evas/engines/gl_generic/evas_ector_gl.h | 36 +++++++++++++++++++ .../engines/gl_generic/evas_ector_gl_buffer.c | 4 +-- .../gl_generic/evas_ector_gl_image_buffer.c | 4 +-- .../evas/engines/gl_generic/evas_engine.c | 4 +-- .../gl_generic/filters/gl_engine_filter.h | 2 +- .../software_generic/evas_ector_software.h | 35 ++++++++++++++++++ .../evas_ector_software_buffer.c | 4 +-- .../engines/software_generic/evas_engine.c | 3 +- 9 files changed, 79 insertions(+), 15 deletions(-) create mode 100644 src/modules/evas/engines/gl_generic/evas_ector_gl.h create mode 100644 src/modules/evas/engines/software_generic/evas_ector_software.h diff --git a/src/Makefile_Evas.am b/src/Makefile_Evas.am index 127042e998..37e1167829 100644 --- a/src/Makefile_Evas.am +++ b/src/Makefile_Evas.am @@ -648,6 +648,7 @@ modules/evas/engines/software_generic/evas_native_tbm.c \ modules/evas/engines/software_generic/evas_native_dmabuf.c \ modules/evas/engines/software_generic/evas_ector_software_buffer.c \ modules/evas/engines/software_generic/evas_native_common.h \ +modules/evas/engines/software_generic/evas_ector_software.h \ $(GFX_FILTER_SW_FILES) lib_evas_libevas_la_LIBADD += lib_evas_libevas_la_CPPFLAGS += -I$(top_srcdir)/src/lib/ector \ @@ -843,6 +844,7 @@ GL_GENERIC_SOURCES = \ modules/evas/engines/gl_generic/evas_engine.c \ modules/evas/engines/gl_generic/Evas_Engine_GL_Generic.h \ modules/evas/engines/gl_generic/Evas_Engine_GL_Shared.h \ +modules/evas/engines/gl_generic/evas_ector_gl.h \ modules/evas/engines/gl_generic/evas_ector_gl_buffer.c \ modules/evas/engines/gl_generic/evas_ector_gl_image_buffer.c \ modules/evas/engines/gl_generic/filters/gl_engine_filter.h \ diff --git a/src/modules/evas/engines/gl_generic/evas_ector_gl.h b/src/modules/evas/engines/gl_generic/evas_ector_gl.h new file mode 100644 index 0000000000..49d9673934 --- /dev/null +++ b/src/modules/evas/engines/gl_generic/evas_ector_gl.h @@ -0,0 +1,36 @@ +#ifndef EVAS_ECTOR_GL_H +#define EVAS_ECTOR_GL_H + +#undef EAPI + +#ifdef _WIN32 +# ifdef EFL_EVAS_BUILD +# ifdef DLL_EXPORT +# define EAPI __declspec(dllexport) +# else +# define EAPI +# endif /* ! DLL_EXPORT */ +# else +# define EAPI __declspec(dllimport) +# endif /* ! EFL_EVAS_BUILD */ +#else +# ifdef __GNUC__ +# if __GNUC__ >= 4 +# define EAPI __attribute__ ((visibility("default"))) +# else +# define EAPI +# endif +# else +# define EAPI +# endif +#endif /* ! _WIN32 */ + +#include "evas_ector_buffer.eo.h" +#include "evas_ector_gl_buffer.eo.h" +#include "evas_ector_gl_image_buffer.eo.h" + +#undef EAPI +#define EAPI + +#endif /* ! EVAS_ECTOR_GL_H */ + diff --git a/src/modules/evas/engines/gl_generic/evas_ector_gl_buffer.c b/src/modules/evas/engines/gl_generic/evas_ector_gl_buffer.c index 46eb8d319b..bf32548e8c 100644 --- a/src/modules/evas/engines/gl_generic/evas_ector_gl_buffer.c +++ b/src/modules/evas/engines/gl_generic/evas_ector_gl_buffer.c @@ -10,9 +10,7 @@ #include #include #include "Evas_Engine_GL_Generic.h" - -#include "evas_ector_buffer.eo.h" -#include "evas_ector_gl_buffer.eo.h" +#include "evas_ector_gl.h" #include "evas_gl_private.h" #define MY_CLASS EVAS_ECTOR_GL_BUFFER_CLASS diff --git a/src/modules/evas/engines/gl_generic/evas_ector_gl_image_buffer.c b/src/modules/evas/engines/gl_generic/evas_ector_gl_image_buffer.c index 1ba39d1b3a..5cb423dcb7 100644 --- a/src/modules/evas/engines/gl_generic/evas_ector_gl_image_buffer.c +++ b/src/modules/evas/engines/gl_generic/evas_ector_gl_image_buffer.c @@ -12,9 +12,7 @@ #include #include #include "Evas_Engine_GL_Generic.h" - -#include "evas_ector_buffer.eo.h" -#include "evas_ector_gl_image_buffer.eo.h" +#include "evas_ector_gl.h" #include "evas_gl_private.h" #define MY_CLASS EVAS_ECTOR_GL_IMAGE_BUFFER_CLASS diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c b/src/modules/evas/engines/gl_generic/evas_engine.c index 3fe5eb8dfa..edf1d54366 100644 --- a/src/modules/evas/engines/gl_generic/evas_engine.c +++ b/src/modules/evas/engines/gl_generic/evas_engine.c @@ -4,9 +4,7 @@ #include "software/Ector_Software.h" #include "cairo/Ector_Cairo.h" #include "gl/Ector_GL.h" -#include "evas_ector_buffer.eo.h" -#include "evas_ector_gl_buffer.eo.h" -#include "evas_ector_gl_image_buffer.eo.h" +#include "evas_ector_gl.h" #include "filters/gl_engine_filter.h" #if defined HAVE_DLSYM && ! defined _WIN32 diff --git a/src/modules/evas/engines/gl_generic/filters/gl_engine_filter.h b/src/modules/evas/engines/gl_generic/filters/gl_engine_filter.h index b310dce134..9cb59d1969 100644 --- a/src/modules/evas/engines/gl_generic/filters/gl_engine_filter.h +++ b/src/modules/evas/engines/gl_generic/filters/gl_engine_filter.h @@ -3,7 +3,7 @@ #include "evas_filter_private.h" #include "evas_gl_common.h" -#include "evas_ector_buffer.eo.h" +#include "../evas_ector_gl.h" #include "../Evas_Engine_GL_Generic.h" extern int _evas_engine_GL_log_dom; diff --git a/src/modules/evas/engines/software_generic/evas_ector_software.h b/src/modules/evas/engines/software_generic/evas_ector_software.h new file mode 100644 index 0000000000..5d10143cc4 --- /dev/null +++ b/src/modules/evas/engines/software_generic/evas_ector_software.h @@ -0,0 +1,35 @@ +#ifndef EVAS_ECTOR_GL_H +#define EVAS_ECTOR_GL_H + +#undef EAPI + +#ifdef _WIN32 +# ifdef EFL_EVAS_BUILD +# ifdef DLL_EXPORT +# define EAPI __declspec(dllexport) +# else +# define EAPI +# endif /* ! DLL_EXPORT */ +# else +# define EAPI __declspec(dllimport) +# endif /* ! EFL_EVAS_BUILD */ +#else +# ifdef __GNUC__ +# if __GNUC__ >= 4 +# define EAPI __attribute__ ((visibility("default"))) +# else +# define EAPI +# endif +# else +# define EAPI +# endif +#endif /* ! _WIN32 */ + +#include "evas_ector_buffer.eo.h" +#include "evas_ector_software_buffer.eo.h" + +#undef EAPI +#define EAPI + +#endif /* ! EVAS_ECTOR_GL_H */ + diff --git a/src/modules/evas/engines/software_generic/evas_ector_software_buffer.c b/src/modules/evas/engines/software_generic/evas_ector_software_buffer.c index cebda32501..0b85c33d9a 100644 --- a/src/modules/evas/engines/software_generic/evas_ector_software_buffer.c +++ b/src/modules/evas/engines/software_generic/evas_ector_software_buffer.c @@ -5,9 +5,7 @@ #include #include "evas_common_private.h" #include "evas_private.h" - -#include "evas_ector_buffer.eo.h" -#include "evas_ector_software_buffer.eo.h" +#include "evas_ector_software.h" #define MY_CLASS EVAS_ECTOR_SOFTWARE_BUFFER_CLASS diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c index 7697592a30..f5caa73526 100644 --- a/src/modules/evas/engines/software_generic/evas_engine.c +++ b/src/modules/evas/engines/software_generic/evas_engine.c @@ -9,8 +9,7 @@ #include #include "cairo/Ector_Cairo.h" -#include "evas_ector_buffer.eo.h" -#include "evas_ector_software_buffer.eo.h" +#include "evas_ector_software.h" #include "draw.h" #include "evas_filter_private.h"