+/*
+ * Several applications, such as Quake3, use dlopen("libGL.so.1"), but
+ * LD_PRELOAD does not intercept symbols obtained via dlopen/dlsym, therefore
+ * we need to intercept the dlopen() call here, and redirect to our wrapper
+ * shared object.
+ */
+extern "C" PUBLIC
+void * dlopen(const char *filename, int flag)
+{
+ void *handle;
+
+ handle = __dlopen(filename, flag);
+
+ const char * libgl_filename = getenv("TRACE_LIBGL");
+
+ if (filename && handle && !libgl_filename) {