[Mesa-dev] [PATCH] src: replace RTLD_NOW with RTLD_LAZY
Jan Ziak
0xe2.0x9a.0x9b at gmail.com
Sat Aug 6 00:42:38 UTC 2016
Mesa source code prior to this patch uses both RTLD_NOW and RTLD_LAZY.
This patch removes all RTLD_NOW in favor of RTLD_LAZY.
In comparison to early binding, lazy binding reduces CPU instruction count
of small GL apps (e.g: glxinfo) by 6 million instructions.
Larger apps won't notice the difference.
Signed-off-by: Jan Ziak (http://atom-symbol.net) <0xe2.0x9a.0x9b at gmail.com>
---
src/egl/drivers/dri2/egl_dri2.c | 6 +++---
src/gbm/backends/dri/gbm_dri.c | 6 +++---
src/glx/apple/apple_cgl.c | 2 +-
src/glx/dri_common.c | 10 +++++-----
4 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index a5cab68..3c9f58e 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -449,12 +449,12 @@ dri2_open_driver(_EGLDisplay *disp)
#if GLX_USE_TLS
snprintf(path, sizeof path,
"%.*s/tls/%s_dri.so", len, p, dri2_dpy->driver_name);
- dri2_dpy->driver = dlopen(path, RTLD_NOW | RTLD_GLOBAL);
+ dri2_dpy->driver = dlopen(path, RTLD_LAZY | RTLD_GLOBAL);
#endif
if (dri2_dpy->driver == NULL) {
snprintf(path, sizeof path,
"%.*s/%s_dri.so", len, p, dri2_dpy->driver_name);
- dri2_dpy->driver = dlopen(path, RTLD_NOW | RTLD_GLOBAL);
+ dri2_dpy->driver = dlopen(path, RTLD_LAZY | RTLD_GLOBAL);
if (dri2_dpy->driver == NULL)
_eglLog(_EGL_DEBUG, "failed to open %s: %s\n", path, dlerror());
}
@@ -464,7 +464,7 @@ dri2_open_driver(_EGLDisplay *disp)
#ifdef ANDROID
snprintf(path, sizeof path, "%.*s/gallium_dri.so", len, p);
- dri2_dpy->driver = dlopen(path, RTLD_NOW | RTLD_GLOBAL);
+ dri2_dpy->driver = dlopen(path, RTLD_LAZY | RTLD_GLOBAL);
if (dri2_dpy->driver == NULL)
_eglLog(_EGL_DEBUG, "failed to open %s: %s\n", path, dlerror());
else
diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c
index c3626e3..a1921b7 100644
--- a/src/gbm/backends/dri/gbm_dri.c
+++ b/src/gbm/backends/dri/gbm_dri.c
@@ -332,12 +332,12 @@ dri_open_driver(struct gbm_dri_device *dri)
#if GLX_USE_TLS
snprintf(path, sizeof path,
"%.*s/tls/%s_dri.so", len, p, dri->base.driver_name);
- dri->driver = dlopen(path, RTLD_NOW | RTLD_GLOBAL);
+ dri->driver = dlopen(path, RTLD_LAZY| RTLD_GLOBAL);
#endif
if (dri->driver == NULL) {
snprintf(path, sizeof path,
"%.*s/%s_dri.so", len, p, dri->base.driver_name);
- dri->driver = dlopen(path, RTLD_NOW | RTLD_GLOBAL);
+ dri->driver = dlopen(path, RTLD_LAZY | RTLD_GLOBAL);
}
/* not need continue to loop all paths once the driver is found */
if (dri->driver != NULL)
@@ -345,7 +345,7 @@ dri_open_driver(struct gbm_dri_device *dri)
#ifdef ANDROID
snprintf(path, sizeof path, "%.*s/gallium_dri.so", len, p);
- dri->driver = dlopen(path, RTLD_NOW | RTLD_GLOBAL);
+ dri->driver = dlopen(path, RTLD_LAZY | RTLD_GLOBAL);
if (dri->driver == NULL)
sprintf("failed to open %s: %s\n", path, dlerror());
else
diff --git a/src/glx/apple/apple_cgl.c b/src/glx/apple/apple_cgl.c
index 648ed86..a458d34 100644
--- a/src/glx/apple/apple_cgl.c
+++ b/src/glx/apple/apple_cgl.c
@@ -75,7 +75,7 @@ apple_cgl_init(void)
}
(void) dlerror(); /*drain dlerror */
- h = dlopen(opengl_framework_path, RTLD_NOW);
+ h = dlopen(opengl_framework_path, RTLD_LAZY);
if (NULL == h) {
fprintf(stderr, "error: unable to dlopen %s : %s\n",
diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c
index 6728d38..c7b7562 100644
--- a/src/glx/dri_common.c
+++ b/src/glx/dri_common.c
@@ -42,8 +42,8 @@
#include "dri_common.h"
#include "loader.h"
-#ifndef RTLD_NOW
-#define RTLD_NOW 0
+#ifndef RTLD_LAZY
+#define RTLD_LAZY 0
#endif
#ifndef RTLD_GLOBAL
#define RTLD_GLOBAL 0
@@ -103,7 +103,7 @@ driOpenDriver(const char *driverName)
int len;
/* Attempt to make sure libGL symbols will be visible to the driver */
- glhandle = dlopen(GL_LIB_NAME, RTLD_NOW | RTLD_GLOBAL);
+ glhandle = dlopen(GL_LIB_NAME, RTLD_LAZY | RTLD_GLOBAL);
libPaths = NULL;
if (geteuid() == getuid()) {
@@ -131,14 +131,14 @@ driOpenDriver(const char *driverName)
snprintf(realDriverName, sizeof realDriverName,
"%.*s/tls/%s_dri.so", len, p, driverName);
InfoMessageF("OpenDriver: trying %s\n", realDriverName);
- handle = dlopen(realDriverName, RTLD_NOW | RTLD_GLOBAL);
+ handle = dlopen(realDriverName, RTLD_LAZY | RTLD_GLOBAL);
#endif
if (handle == NULL) {
snprintf(realDriverName, sizeof realDriverName,
"%.*s/%s_dri.so", len, p, driverName);
InfoMessageF("OpenDriver: trying %s\n", realDriverName);
- handle = dlopen(realDriverName, RTLD_NOW | RTLD_GLOBAL);
+ handle = dlopen(realDriverName, RTLD_LAZY | RTLD_GLOBAL);
}
if (handle != NULL)
More information about the mesa-dev
mailing list