mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 15:48:36 +02:00
glapi: Force frame pointer elimination on Windows.
To catch mismatches in cdecl vs stdcall calling convention. See code comment for more detailed explanation. Tested with piglit gl-1.0-beginend-coverage (it now also crashes on debug builds.) VMware PR1350505. Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
1829f9c928
commit
fd1f79f7dd
1 changed files with 22 additions and 0 deletions
|
|
@ -144,6 +144,28 @@ GL_API void GL_APIENTRY glTexParameterxv (GLenum target, GLenum pname, const GLf
|
|||
GL_API void GL_APIENTRY glTranslatex (GLfixed x, GLfixed y, GLfixed z);
|
||||
GL_API void GL_APIENTRY glPointSizePointerOES (GLenum type, GLsizei stride, const GLvoid *pointer);
|
||||
|
||||
/* Enable frame pointer elimination on Windows, otherwise forgetting to add
|
||||
* APIENTRY to _mesa_* entrypoints will not cause crashes on debug builds, as
|
||||
* the initial ESP value is saved in the EBP in the function prologue, then
|
||||
* restored on the epilogue, clobbering any corruption in the ESP pointer due
|
||||
* to mismatch in the callee calling convention.
|
||||
*
|
||||
* On MSVC it's not sufficient to enable /Oy -- other optimizations must be
|
||||
* enabled or frame pointer will be used regardless.
|
||||
*
|
||||
* We don't do this when NDEBUG is defined since, frame pointer omission
|
||||
* optimization compiler flag are already specified on release builds, and
|
||||
* because on profile builds we must have frame pointers or certain profilers
|
||||
* might fail to unwind the stack.
|
||||
*/
|
||||
#if defined(_WIN32) && !defined(NDEBUG)
|
||||
# if defined(_MSC_VER)
|
||||
# pragma optimize( "gty", on )
|
||||
# elif defined(__GNUC__)
|
||||
# pragma GCC optimize ("omit-frame-pointer")
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include "glapi/glapitemp.h"
|
||||
|
||||
#endif /* USE_X86_ASM */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue