/*
  * Lookup a EGL or GLES symbol
  */
-void * __libegl_sym(const char *symbol, bool pub)
+void * __libegl_sym(const char *symbol)
 {
     void *proc;
 
-    /*
-     * Public symbols are EGL core functions and those defined in dekstop GL
-     * ABI.  Troubles come from the latter.
+    /* Always try dlsym before eglGetProcAddress as spec 3.10 says
+     * implementation may choose to also export extension functions
+     * publicly.
      */
-    if (pub) {
-        proc = dlsym(RTLD_NEXT, symbol);
-        if (!proc && symbol[0] == 'g' && symbol[1] == 'l')
-            proc = (void *) __eglGetProcAddress(symbol);
-    }
-    else {
+    proc = dlsym(RTLD_NEXT, symbol);
+    if (!proc && symbol[0] == 'g' && symbol[1] == 'l')
         proc = (void *) __eglGetProcAddress(symbol);
-        if (!proc && symbol[0] == 'g' && symbol[1] == 'l')
-            proc = dlsym(RTLD_NEXT, symbol);
-    }
 
     return proc;
 }
 
         print '#  endif'
         print '#else /* !RETRACE */'
         print '#  if defined(TRACE_EGL)'
-        print '#    define __getPublicProcAddress(name) __libegl_sym(name, true)'
-        print '#    define __getPrivateProcAddress(name) __libegl_sym(name, false)'
-        print '     void * __libegl_sym(const char *symbol, bool pub);'
+        print '#    define __getPublicProcAddress(name) __libegl_sym(name)'
+        print '#    define __getPrivateProcAddress(name) __libegl_sym(name)'
+        print '     void * __libegl_sym(const char *symbol);'
         print '#  elif defined(_WIN32)'
         print '     PROC __getPublicProcAddress(LPCSTR lpProcName);'
         print '#    define __getPrivateProcAddress(name) __wglGetProcAddress(name)'