Move `dlsym` hook out from inject_glx.cpp

pull/131/head
jackun 4 years ago
parent 0a36578adf
commit bd9d9650a0
No known key found for this signature in database
GPG Key ID: 119DB3F1D05A9ED3

@ -202,7 +202,7 @@ static std::array<const func_ptr, 9> name_to_funcptr_map = {{
#undef ADD_HOOK
}};
static void *find_ptr(const char *name)
void *find_glx_ptr(const char *name)
{
for (auto& func : name_to_funcptr_map) {
if (strcmp(name, func.name) == 0)
@ -215,7 +215,7 @@ static void *find_ptr(const char *name)
EXPORT_C_(void *) glXGetProcAddress(const unsigned char* procName) {
//std::cerr << __func__ << ":" << procName << std::endl;
void* func = find_ptr( (const char*)procName );
void* func = find_glx_ptr( (const char*)procName );
if (func)
return func;
@ -225,23 +225,9 @@ EXPORT_C_(void *) glXGetProcAddress(const unsigned char* procName) {
EXPORT_C_(void *) glXGetProcAddressARB(const unsigned char* procName) {
//std::cerr << __func__ << ":" << procName << std::endl;
void* func = find_ptr( (const char*)procName );
void* func = find_glx_ptr( (const char*)procName );
if (func)
return func;
return get_glx_proc_address((const char*)procName);
}
#ifdef HOOK_DLSYM
EXPORT_C_(void*) dlsym(void * handle, const char * name)
{
void* func = find_ptr(name);
if (func) {
//fprintf(stderr,"%s: local: %s\n", __func__ , name);
return func;
}
//fprintf(stderr,"%s: foreign: %s\n", __func__ , name);
return real_dlsym(handle, name);
}
#endif

@ -81,3 +81,22 @@ void *real_dlsym(void *handle, const char *symbol)
return result;
}
#ifdef HOOK_DLSYM
extern void *find_glx_ptr(const char *name);
EXPORT_C_(void*) dlsym(void * handle, const char * name)
{
#ifdef HAVE_X11
void* func = find_glx_ptr(name);
if (func) {
//fprintf(stderr,"%s: local: %s\n", __func__ , name);
return func;
}
#endif
//fprintf(stderr,"%s: foreign: %s\n", __func__ , name);
return real_dlsym(handle, name);
}
#endif

@ -1,4 +1,6 @@
#pragma once
#define EXPORT_C_(type) extern "C" __attribute__((__visibility__("default"))) type
void *real_dlopen(const char *filename, int flag);
void* real_dlsym( void*, const char* );

Loading…
Cancel
Save