darwin: Write errors in choosing the pixel format to the crash log
authorJeremy Huddleston Sequoia <jeremyhu@apple.com>
Sat, 24 May 2014 21:13:33 +0000 (14:13 -0700)
committerJeremy Huddleston Sequoia <jeremyhu@apple.com>
Sun, 25 May 2014 03:41:35 +0000 (20:41 -0700)
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
src/glx/apple/apple_visual.c

index c6ede51e48980cb6b9e65a6f091a7809c46a8b40..951b2135ad358f90de49aea50f0f3d258e9af461 100644 (file)
@@ -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();
    }
 }