summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Huddleston Sequoia <jeremyhu@apple.com>2014-05-24 14:13:33 -0700
committerJeremy Huddleston Sequoia <jeremyhu@apple.com>2014-05-24 20:42:37 -0700
commit1b2f877c8ef052b183c1f20ece6c6e4a7bfd237c (patch)
treecbb789e704a50f7fa5845f00f65099232dfc16e7
parentf0702d6e631bb912a230c081463bb51a0dde1bff (diff)
darwin: Write errors in choosing the pixel format to the crash log
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com> (cherry picked from commit 9eb1d36c978a9b15ae2e999c630492dfffd7f165)
-rw-r--r--src/glx/apple/apple_visual.c18
1 files 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();
}
}