From 6ba58f153de1c5bf8aca354d08173e137bdb21e3 Mon Sep 17 00:00:00 2001 From: Andrii Simiklit Date: Wed, 8 Jan 2020 17:51:13 +0200 Subject: [PATCH] Fix a handling of dlsym(RTLD_NEXT) without loading libGL. Closes #1463 * The original fix leads to infinite recursion in GLX, EGL hooks. Due to `dlopen` function override in `librenderdoc.so` library the `Process::LoadModule` function always returns a handle of `librenderdoc.so` instead of requested library. So instead of `real function` we receive an address of the `hook` that leads to the infinite recursion in this `hook`. Fixes: 6d40bbb ('Add experimental wayland support. Refs #853') Tested-by: Andrii Simiklit --- renderdoc/driver/gl/egl_hooks.cpp | 3 ++- renderdoc/driver/gl/glx_hooks.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/gl/egl_hooks.cpp b/renderdoc/driver/gl/egl_hooks.cpp index e98fb6380..aa97237dc 100644 --- a/renderdoc/driver/gl/egl_hooks.cpp +++ b/renderdoc/driver/gl/egl_hooks.cpp @@ -143,7 +143,8 @@ static void EnsureRealLibraryLoaded() if(!handle) handle = Process::LoadModule("libEGL.so.1"); - eglhook.handle = handle; + if(RenderDoc::Inst().IsReplayApp()) + eglhook.handle = handle; } #endif } diff --git a/renderdoc/driver/gl/glx_hooks.cpp b/renderdoc/driver/gl/glx_hooks.cpp index 983917f88..3c2fcd758 100644 --- a/renderdoc/driver/gl/glx_hooks.cpp +++ b/renderdoc/driver/gl/glx_hooks.cpp @@ -76,7 +76,8 @@ static void EnsureRealLibraryLoaded() if(!handle) handle = Process::LoadModule("libGLX.so.0"); - glxhook.handle = handle; + if(RenderDoc::Inst().IsReplayApp()) + glxhook.handle = handle; } }