mapi/glapi: Never use a generic no-op entry-point on Windows.
authorJosé Fonseca <jfonseca@vmware.com>
Thu, 2 Feb 2012 10:44:10 +0000 (10:44 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Thu, 2 Feb 2012 14:45:24 +0000 (14:45 +0000)
When GLAPIENTRY is __stdcall (ie Windows), the stack is popped by the
callee making the number/type of arguments significant, therefore
using a generic no-op causes stack corruption for many entry-points.

NOTE: This is a candidate for the 8.0 branch.

Reviewed-by: Brian Paul <brianp@vmware.com>
src/mapi/glapi/glapi_nop.c

index 9b092971506f59bb12df7a3d941877ab0b710e42..69b1ae6dd79f60b61b3656881374f98bce55f4c6 100644 (file)
@@ -51,7 +51,11 @@ _glapi_set_warning_func(_glapi_proc func)
 {
 }
 
-#ifdef DEBUG
+/*
+ * When GLAPIENTRY is __stdcall (i.e. Windows), the stack is popped by the
+ * callee making the number/type of arguments significant.
+ */
+#if defined(_WIN32) || defined(DEBUG)
 
 /**
  * Called by each of the no-op GL entrypoints.
@@ -59,7 +63,7 @@ _glapi_set_warning_func(_glapi_proc func)
 static int
 Warn(const char *func)
 {
-#if !defined(_WIN32_WCE)
+#if defined(DEBUG) && !defined(_WIN32_WCE)
    if (getenv("MESA_DEBUG") || getenv("LIBGL_DEBUG")) {
       fprintf(stderr, "GL User Error: gl%s called without a rendering context\n",
               func);