summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/crash-u.cc
diff options
context:
space:
mode:
authorSteven Noonan <steven@uplinklabs.net>2009-10-10 04:36:42 -0700
committerSteven Noonan <steven@uplinklabs.net>2009-10-10 22:18:48 -0700
commit66c59ae9c97694a8ab33eddd266dd6f73d72fde7 (patch)
treebd27426778e720fa895635b26b6a0909300d21af /crawl-ref/source/crash-u.cc
parent6eb4f8d4954d7ba008de2eb921d42e02993b9db5 (diff)
downloadcrawl-ref-66c59ae9c97694a8ab33eddd266dd6f73d72fde7.tar.gz
crawl-ref-66c59ae9c97694a8ab33eddd266dd6f73d72fde7.zip
project-wide: implement use of platform.h detection macros
Signed-off-by: Steven Noonan <steven@uplinklabs.net>
Diffstat (limited to 'crawl-ref/source/crash-u.cc')
-rw-r--r--crawl-ref/source/crash-u.cc30
1 files changed, 18 insertions, 12 deletions
diff --git a/crawl-ref/source/crash-u.cc b/crawl-ref/source/crash-u.cc
index b7a7007470..052a2ea3ef 100644
--- a/crawl-ref/source/crash-u.cc
+++ b/crawl-ref/source/crash-u.cc
@@ -11,11 +11,17 @@ REVISION("$Rev$");
#include <signal.h>
#endif
-#if (defined(UNIX) || defined(OSX))
+#if defined(UNIX)
#include <cxxabi.h>
-#ifdef OSX
+#if !defined(TARGET_OS_MACOSX) && \
+ !defined(TARGET_OS_WINDOWS) && \
+ !defined(TARGET_COMPILER_CYGWIN)
+#include <execinfo.h>
+#endif
+
+#ifdef TARGET_OS_MACOSX
#include <dlfcn.h>
typedef int (*backtrace_t)(void * *, int);
@@ -28,11 +34,9 @@ template <typename TO, typename FROM> TO nasty_cast(FROM f) {
FROM f; TO t;
} u; u.f = f; return u.t;
}
-#else
-#include <execinfo.h>
-#endif // OSX
+#endif // TARGET_OS_MACOSX
-#endif // defined(UNIX) || defined(OSX)
+#endif // defined(UNIX) || defined(TARGET_OS_MACOSX)
#include "crash.h"
@@ -147,20 +151,22 @@ void init_crash_handler()
void dump_crash_info(FILE* file)
{
+#if defined(UNIX)
const char *name = strsignal(_crash_signal);
if (name == NULL)
name = "INVALID";
fprintf(file, "Crash caused by signal #%d: %s" EOL EOL, _crash_signal,
name);
+#endif
}
-#if (defined(UNIX) || defined(OSX))
+#if defined(UNIX) && !defined(TARGET_COMPILER_CYGWIN)
void write_stack_trace(FILE* file, int ignore_count)
{
void* frames[50];
-#if defined (OSX)
+#if defined (TARGET_OS_MACOSX)
backtrace_t backtrace;
backtrace_symbols_t backtrace_symbols;
backtrace = nasty_cast<backtrace_t, void*>(dlsym(RTLD_DEFAULT, "backtrace"));
@@ -176,7 +182,7 @@ void write_stack_trace(FILE* file, int ignore_count)
int num_frames = backtrace(frames, ARRAYSZ(frames));
char **symbols = backtrace_symbols(frames, num_frames);
-#ifndef OSX
+#if !defined(TARGET_OS_MACOSX)
if (symbols == NULL)
{
fprintf(stderr, "Out of memory." EOL);
@@ -194,7 +200,7 @@ void write_stack_trace(FILE* file, int ignore_count)
// Now we prettify the printout to even show demangled C++ function names.
std::string bt = "";
for (int i = 0; i < num_frames; i++) {
-#if defined (OSX)
+#if defined (TARGET_OS_MACOSX)
char *addr = ::strstr(symbols[i], "0x");
char *mangled = ::strchr(addr, ' ') + 1;
char *offset = ::strchr(addr, '+');
@@ -217,7 +223,7 @@ void write_stack_trace(FILE* file, int ignore_count)
bt += offset;
free(realname);
}
-#else // OSX
+#else // TARGET_OS_MACOSX
bt += symbols[i];
int status;
// Extract the identifier from symbols[i]. It's inside of parens.
@@ -240,7 +246,7 @@ void write_stack_trace(FILE* file, int ignore_count)
free(symbols);
}
-#else // defined(UNIX) || defined(OSX)
+#else // defined(UNIX)
void write_stack_trace(FILE* file, int ignore_count)
{
const char* msg = "Unable to get stack trace on this platform." EOL;