Commit 2a1c5693 by Nicolas Capens

Only load a dependent library when it has an expected symbol.

Bug 18752589 Change-Id: Ic42be261dc101810e6363c4823620d6c827c7975 Reviewed-on: https://swiftshader-review.googlesource.com/2880Tested-by: 's avatarNicolas Capens <capn@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent 1906d0a2
......@@ -19,10 +19,12 @@
#endif
void *getLibraryHandle(const char *path);
void *loadLibrary(const char *path);
void *loadLibrary(const char *path);
void freeLibrary(void *library);
void *getProcAddress(void *library, const char *name);
template<int n>
void *loadLibrary(const char *(&names)[n])
void *loadLibrary(const char *(&names)[n], const char *mustContainSymbol = nullptr)
{
for(int i = 0; i < n; i++)
{
......@@ -30,7 +32,12 @@ void *loadLibrary(const char *(&names)[n])
if(library)
{
return library;
if(!mustContainSymbol || getProcAddress(library, mustContainSymbol))
{
return library;
}
freeLibrary(library);
}
}
......@@ -40,7 +47,12 @@ void *loadLibrary(const char *(&names)[n])
if(library)
{
return library;
if(!mustContainSymbol || getProcAddress(library, mustContainSymbol))
{
return library;
}
freeLibrary(library);
}
}
......
......@@ -24,6 +24,7 @@ LOCAL_CFLAGS += -UNDEBUG -g
#LOCAL_CFLAGS += -DANGLE_DISABLE_TRACE
LOCAL_CFLAGS += -std=c++11
LOCAL_CFLAGS += -fvisibility=protected
# These changes tie the build to Cloud Android. Do something else
# for other Android builds.
......
......@@ -42,7 +42,7 @@ global:
eglCreatePlatformWindowSurfaceEXT;
eglCreatePlatformPixmapSurfaceEXT;
libEGLexports;
libEGL_swiftshader;
local:
*;
......
......@@ -100,6 +100,7 @@
<Add option="-Wall" />
<Add option="-std=c++11" />
<Add option="-fexceptions" />
<Add option="-fvisibility=protected" />
<Add directory="./../include/" />
<Add directory="./../" />
<Add directory="./../../" />
......
......@@ -42,4 +42,4 @@ EXPORTS
eglCreatePlatformWindowSurfaceEXT
eglCreatePlatformPixmapSurfaceEXT
libEGLexports
\ No newline at end of file
libEGL_swiftshader
\ No newline at end of file
......@@ -89,12 +89,12 @@ private:
const char *libEGL_lib[] = {"libEGL_translator.so", "libEGL.so.1", "libEGL.so"};
#endif
libEGL = loadLibrary(libEGL_lib);
libEGL = loadLibrary(libEGL_lib, "libEGL_swiftshader");
if(libEGL)
{
auto libEGLexportsProc = (LibEGLexports *(*)())getProcAddress(libEGL, "libEGLexports");
libEGLexports = libEGLexportsProc();
auto libEGL_swiftshader = (LibEGLexports *(*)())getProcAddress(libEGL, "libEGL_swiftshader");
libEGLexports = libEGL_swiftshader();
}
}
......
......@@ -363,7 +363,7 @@ LibEGLexports::LibEGLexports()
this->clientGetCurrentDisplay = egl::getCurrentDisplay;
}
extern "C" LibEGLexports *libEGLexports()
extern "C" LibEGLexports *libEGL_swiftshader()
{
static LibEGLexports libEGL;
return &libEGL;
......
......@@ -89,6 +89,7 @@ LOCAL_SRC_FILES += \
LOCAL_CFLAGS += -DLOG_TAG=\"libGLES_CM_swiftshader\"
LOCAL_CFLAGS += -fno-operator-names -msse2 -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS
LOCAL_CFLAGS += -std=c++11
LOCAL_CFLAGS += -fvisibility=protected
# Android's make system also uses NDEBUG, so we need to set/unset it forcefully
# Uncomment for ON:
......
{
global:
eglBindAPI;
eglBindTexImage;
eglChooseConfig;
eglCopyBuffers;
......@@ -205,7 +206,7 @@ global:
glDrawTexfOES;
glDrawTexfvOES;
libGLES_CMexports;
libGLES_CM_swiftshader;
Register;
......
......@@ -115,6 +115,7 @@
<Add option="-fexceptions" />
<Add option="-fno-operator-names" />
<Add option="-msse2" />
<Add option="-fvisibility=protected" />
<Add option="-D__STDC_LIMIT_MACROS" />
<Add option="-D__STDC_CONSTANT_MACROS" />
<Add directory="./../" />
......
......@@ -205,6 +205,6 @@ EXPORTS
glDrawTexfOES
glDrawTexfvOES
libGLES_CMexports
libGLES_CM_swiftshader
Register
\ No newline at end of file
......@@ -76,12 +76,12 @@ private:
const char *libGLES_CM_lib[] = {"libGLES_CM_translator.so", "libGLES_CM.so.1", "libGLES_CM.so"};
#endif
libGLES_CM = loadLibrary(libGLES_CM_lib);
libGLES_CM = loadLibrary(libGLES_CM_lib, "libGLES_CM_swiftshader");
if(libGLES_CM)
{
auto libGLES_CMexportsProc = (LibGLES_CMexports *(*)())getProcAddress(libGLES_CM, "libGLES_CMexports");
libGLES_CMexports = libGLES_CMexportsProc();
auto libGLES_CM_swiftshader = (LibGLES_CMexports *(*)())getProcAddress(libGLES_CM, "libGLES_CM_swiftshader");
libGLES_CMexports = libGLES_CM_swiftshader();
}
}
......
......@@ -157,7 +157,7 @@ LibGLES_CMexports::LibGLES_CMexports()
this->glEGLImageTargetTexture2DOES = ::glEGLImageTargetTexture2DOES;
}
extern "C" LibGLES_CMexports *libGLES_CMexports()
extern "C" LibGLES_CMexports *libGLES_CM_swiftshader()
{
static LibGLES_CMexports libGLES_CM;
return &libGLES_CM;
......
......@@ -135,6 +135,7 @@ LOCAL_CFLAGS += -UNDEBUG -g
LOCAL_CFLAGS += -fno-operator-names -msse2 -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS
LOCAL_CFLAGS += -std=c++11
LOCAL_CFLAGS += -fvisibility=protected
LOCAL_SHARED_LIBRARIES += libdl liblog libcutils libhardware libui libutils \
$(GCE_STLPORT_LIBS)
......
......@@ -168,7 +168,7 @@ global:
glEGLImageTargetTexture2DOES;
glEGLImageTargetRenderbufferStorageOES;
libGLESv2exports;
libGLESv2_swiftshader;
Register;
......
......@@ -115,6 +115,7 @@
<Add option="-fexceptions" />
<Add option="-fno-operator-names" />
<Add option="-msse2" />
<Add option="-fvisibility=protected" />
<Add option="-D__STDC_LIMIT_MACROS" />
<Add option="-D__STDC_CONSTANT_MACROS" />
<Add directory="./../" />
......
......@@ -274,6 +274,6 @@ EXPORTS
glTexStorage3D @304
glGetInternalformativ @308
libGLESv2exports
libGLESv2_swiftshader
Register
\ No newline at end of file
......@@ -74,12 +74,12 @@ private:
const char *libGLESv2_lib[] = {"libGLES_V2_translator.so", "libGLESv2.so.2", "libGLESv2.so"};
#endif
libGLESv2 = loadLibrary(libGLESv2_lib);
libGLESv2 = loadLibrary(libGLESv2_lib, "libGLESv2_swiftshader");
if(libGLESv2)
{
auto libGLESv2exportsProc = (LibGLESv2exports *(*)())getProcAddress(libGLESv2, "libGLESv2exports");
libGLESv2exports = libGLESv2exportsProc();
auto libGLESv2_swiftshader = (LibGLESv2exports *(*)())getProcAddress(libGLESv2, "libGLESv2_swiftshader");
libGLESv2exports = libGLESv2_swiftshader();
}
}
......
......@@ -165,7 +165,7 @@ LibGLESv2exports::LibGLESv2exports()
this->createFrameBuffer = ::createFrameBuffer;
}
extern "C" LibGLESv2exports *libGLESv2exports()
extern "C" LibGLESv2exports *libGLESv2_swiftshader()
{
static LibGLESv2exports libGLESv2;
return &libGLESv2;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment