From 9eb1d36c978a9b15ae2e999c630492dfffd7f165 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Sequoia Date: Sat, 24 May 2014 14:13:33 -0700 Subject: [PATCH] darwin: Write errors in choosing the pixel format to the crash log Signed-off-by: Jeremy Huddleston Sequoia --- src/glx/apple/apple_visual.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/glx/apple/apple_visual.c b/src/glx/apple/apple_visual.c index c6ede51e489..951b2135ad3 100644 --- a/src/glx/apple/apple_visual.c +++ b/src/glx/apple/apple_visual.c @@ -63,6 +63,16 @@ enum MAX_ATTR = 60 }; +static char __crashreporter_info_buff__[4096] = { 0 }; +static const char *__crashreporter_info__ __attribute__((__used__)) = + &__crashreporter_info_buff__[0]; +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050 +// This is actually a toolchain requirement, but I'm not sure the correct check, +// but it should be fine to just only include it for Leopard and later. This line +// just tells the linker to never strip this symbol (such as for space optimization) +__asm__ (".desc ___crashreporter_info__, 0x10"); +#endif + void apple_visual_create_pfobj(CGLPixelFormatObj * pfobj, const struct glx_config * mode, bool * double_buffered, bool * uses_stereo, @@ -164,12 +174,16 @@ apple_visual_create_pfobj(CGLPixelFormatObj * pfobj, const struct glx_config * m error = apple_cgl.choose_pixel_format(attr, pfobj, &vsref); if (error) { - fprintf(stderr, "error: %s\n", apple_cgl.error_string(error)); + snprintf(__crashreporter_info_buff__, sizeof(__crashreporter_info_buff__), + "CGLChoosePixelFormat error: %s\n", apple_cgl.error_string(error)); + fprintf(stderr, "%s", __crashreporter_info_buff__); abort(); } if (!*pfobj) { - fprintf(stderr, "No matching pixelformats found, perhaps try using LIBGL_ALLOW_SOFTWARE\n"); + snprintf(__crashreporter_info_buff__, sizeof(__crashreporter_info_buff__), + "No matching pixelformats found, perhaps try using LIBGL_ALLOW_SOFTWARE\n"); + fprintf(stderr, "%s", __crashreporter_info_buff__); abort(); } } -- 2.30.2