Commit a79c2440 by Tim Van Patten Committed by Commit Bot

Make libEGL function pointers hidden in symbol table

The libEGL_angle.so and libGLESv2_angle.so libraries are typically loaded into the same process each time, so we need to make sure there aren't any duplicated symbols which could violate ODR and lead to crashes or undefined behavior. In this case, the libEGL_angle.so function pointer names were colliding with libGLESv2_angle.so function names, causing crashes at runtime. The fix here is to mark the libEGL_angle.so function pointer symbols 'hidden', so they don't appear in the symbol table for other executables/libraries to see and can't be overridden by other symbols. Bug: angleproject:3751 Test: Embed ANGLE within dEQP.apk and verify no crashes Change-Id: Ibb78369374a4a68b3489a7dd7775c52e29fa37e0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1724909 Commit-Queue: Tim Van Patten <timvp@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent cbabea73
...@@ -29,4 +29,12 @@ ...@@ -29,4 +29,12 @@
# endif # endif
#endif // !defined(ANGLE_EXPORT) #endif // !defined(ANGLE_EXPORT)
#if !defined(ANGLE_NO_EXPORT)
# if defined(__GNUC__)
# define ANGLE_NO_EXPORT __attribute__((visibility("hidden")))
# else
# define ANGLE_NO_EXPORT
# endif
#endif // !defined(ANGLE_NO_EXPORT)
#endif // LIBGLESV2_EXPORT_H_ #endif // LIBGLESV2_EXPORT_H_
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
"scripts/egl_angle_ext.xml": "scripts/egl_angle_ext.xml":
"fc2e249239fb1365f6d145cdf1a3cfcf", "fc2e249239fb1365f6d145cdf1a3cfcf",
"scripts/generate_loader.py": "scripts/generate_loader.py":
"5a7cd014230fe04664d9613e65399d42", "48c60c668bec42a80378179aae2acc61",
"scripts/registry_xml.py": "scripts/registry_xml.py":
"97cca309a0561f3bf54e0e2c1cf0708b", "97cca309a0561f3bf54e0e2c1cf0708b",
"scripts/wgl.xml": "scripts/wgl.xml":
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
"src/libEGL/egl_loader_autogen.cpp": "src/libEGL/egl_loader_autogen.cpp":
"01d20878ff5644bb9ee9e22ec95c3587", "01d20878ff5644bb9ee9e22ec95c3587",
"src/libEGL/egl_loader_autogen.h": "src/libEGL/egl_loader_autogen.h":
"fcaa495dbf4ad4841c60f669f5fabfb8", "a9d4b21e3a74565a6710c76c4f3bcbdc",
"util/egl_loader_autogen.cpp": "util/egl_loader_autogen.cpp":
"b9a444da4142a12a9fe6b7a9d33a4ea8", "b9a444da4142a12a9fe6b7a9d33a4ea8",
"util/egl_loader_autogen.h": "util/egl_loader_autogen.h":
......
...@@ -97,7 +97,8 @@ def gen_libegl_loader(): ...@@ -97,7 +97,8 @@ def gen_libegl_loader():
all_cmds = xml.all_cmd_names.get_all_commands() all_cmds = xml.all_cmd_names.get_all_commands()
path = os.path.join("..", "src", "libEGL") path = os.path.join("..", "src", "libEGL")
write_header(data_source_name, all_cmds, "egl", libegl_preamble, path, "LIBEGL", "", "EGL_") write_header(data_source_name, all_cmds, "egl", libegl_preamble, path, "LIBEGL", "", "EGL_",
"ANGLE_NO_EXPORT ")
write_source(data_source_name, all_cmds, "egl", path, "", "EGL_") write_source(data_source_name, all_cmds, "egl", path, "", "EGL_")
...@@ -223,6 +224,7 @@ def main(): ...@@ -223,6 +224,7 @@ def main():
libegl_preamble = """#include <EGL/egl.h> libegl_preamble = """#include <EGL/egl.h>
#include <EGL/eglext.h> #include <EGL/eglext.h>
#include <export.h>
""" """
util_gles_preamble = """#if defined(GL_GLES_PROTOTYPES) && GL_GLES_PROTOTYPES util_gles_preamble = """#if defined(GL_GLES_PROTOTYPES) && GL_GLES_PROTOTYPES
......
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