diff options
author | Steven Noonan <steven@uplinklabs.net> | 2009-10-10 04:36:42 -0700 |
---|---|---|
committer | Steven Noonan <steven@uplinklabs.net> | 2009-10-10 22:18:48 -0700 |
commit | 66c59ae9c97694a8ab33eddd266dd6f73d72fde7 (patch) | |
tree | bd27426778e720fa895635b26b6a0909300d21af /crawl-ref/source/crash-u.cc | |
parent | 6eb4f8d4954d7ba008de2eb921d42e02993b9db5 (diff) | |
download | crawl-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.cc | 30 |
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; |