against them in the make files like libunix/libgui/etc are.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@8675 c06c8d41-db1a-0410-9941-cceddc491573
OIAQU4VDTZ3EHBNC7FZIOW2QEQLTDHZ7O46XW2YWM6JRVBC66UPQC MADTICUXDKQB7EKTXG7J2OIJGUM7A437FRWIBRA3BIVEKXEXHO6AC S2EXUI56ELPRVIPYMAFEA6R4FQN7VJ7SNIURRZWFHXUKQ7UYLBUQC NHAV2FMPL4SOAND5MX7HSPRSHYAXRRNXJ764ANKDTDW4RTM2R6KQC HVAXGXQIGESHOLDQDNVP42XMEKVXFKXJ63IHXVBVSSZUJYHLR7FQC Q3B3UVMYEVC4YJUPYVSNTR4DJH4E6J4JJDHZNT5LNOCHCPPMEMXAC 25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC QOYITYZZM3BXITPZGSQGAVUM4T5H6ZL4QYRG5H5W7PSELOF2PO2QC IIN7AVA6JYRBXH6ZYRR7BY7TV6PW7ANAQ2A3PD55FKBKKQFEEF2AC KOMZPTDEZP3P6EWBUECWDY7OWELOUTMAUKNEOJ7PWX5LJBTMRVQAC L3DRKFURVDCV3EJKGG6GVVQX3D5MZPICTVOKNOD3LGM2PECBA7PQC PL6I2CMSTHY5ZHWVMIQE5YTM5S5VPKBNZM6QJVHZSSKOJGIJ5W4AC W7GNFYY2W7NCSNNNXIVZ5FN6F2MIZO2JUQXV2JBOLGUC2DXST7OQC NXYLHBIFJ236BL4EPOGKBHEBHZI4ZTLFFTXKQHFYTOSK2FJCBLIQC VPZUNOEZYK7HPIB7XIWRBE4UNDIIN3S6STSWNLELVIZPF2GAFEUQC GCIZIUXO5TYROKDUYB3HAY7H7MRDTJNM7HR7DGSH7KXDIZC2LCDAC KFZYPFHHOWRUZEK2PW26EI73Z6I6DLHW2YEJV2CB5XBWFRRNBFXQC UL7XFKMUX3WIU4O2LZANK4ECJ654UZPDBFGNXUEYZYOLKBYBCG6AC Y56C5OMUQ5XF2G6DKDV4R5MED44UOIUPTBBQVWQBUHYIXYA5MOZAC }}/////////////////////////////////////////////////////////////////////////////// Code for printing out debugging info on a crash.////////////////////////////////////////////////////////////////////////////static int _crash_signal = 0;static int _recursion_depth = 0;static void _crash_signal_handler(int sig_num){if (crawl_state.game_crashed){if (_recursion_depth > 0)return;_recursion_depth++;fprintf(stderr, "Recursive crash." EOL);std::string dir = (!Options.morgue_dir.empty() ? Options.morgue_dir :!SysEnv.crawl_dir.empty() ? SysEnv.crawl_dir: "");if (!dir.empty() && dir[dir.length() - 1] != FILE_SEPARATOR)dir += FILE_SEPARATOR;char name[180];sprintf(name, "%scrash-recursive-%s-%d.txt", dir.c_str(),you.your_name, (int) time(NULL));FILE* file = fopen(name, "w");if (file == NULL)file = stderr;write_stack_trace(file, 0);if (file != stderr)fclose(file);return;}_crash_signal = sig_num;crawl_state.game_crashed = true;// In case the crash dumper is unable to open a file and has to dump// to stderr.#ifndef USE_TILEunixcurses_shutdown();#endifdo_crash_dump();// Now crash for real.signal(sig_num, SIG_DFL);raise(sig_num);}void init_crash_handler(){#if defined(USE_UNIX_SIGNALS)for (int i = 1; i <= 64; i++){#ifdef SIGHUP_SAVEif (i == SIGHUP)continue;#endif#ifdef SIGQUITif (i == SIGQUIT)continue;#endif#ifdef SIGINTif (i == SIGINT)continue;#endif#ifdef SIGCHLDif (i == SIGCHLD)continue;#endif#ifdef SIGTSTPif (i == SIGTSTP)continue;#endif#ifdef SIGCONTif (i == SIGCONT)continue;#endif#ifdef SIGIOif (i == SIGIO)continue;#endif#ifdef SIGPROFif (i == SIGPROF)continue;#endifif (i == SIGWINCH)continue;signal(i, _crash_signal_handler);
fprintf(file, "Crash caused by signal #%d: %s" EOL, _crash_signal,name);}#ifdef __GLIBC__// NOTE: This should work on OS X, according to// http://developer.apple.com/DOCUMENTATION/DARWIN/Reference/ManPages/man3/backtrace_symbols.3.htmlvoid write_stack_trace(FILE* file, int ignore_count){void* frames[50];int num_frames = backtrace(frames, ARRAYSZ(frames));char **symbols = backtrace_symbols(frames, num_frames);if (symbols == NULL){fprintf(stderr, "Out of memroy." EOL);fprintf(file, "Out of memory." EOL);// backtrace_symbols_fd() can print out the stack trace even if// malloc() can't find any free memory.backtrace_symbols_fd(frames, num_frames, fileno(file));return;}for (int i = ignore_count; i < num_frames; i++){fprintf(file, "%s" EOL, symbols[i]);}free(symbols);}#else // ifdef __GLIBC__void write_stack_trace(FILE* file, int ignore_count){const char* msg = "Unable to get stack trace on this platform." EOL;fprintf(stderr, msg);fprintf(file, msg);}#endif
/** File: crash.h* Summary: Platform specific crash handling functions.* Written by: Matthew cline** Modified for Crawl Reference by $Author$ on $Date$*/#ifndef CRASH_H#define CRASH_H#include <stdio.h>void init_crash_handler();void dump_crash_info(FILE* file);void write_stack_trace(FILE* file, int ignore_count);#endif
/** File: crash-w.cc* Summary: Windows specific crash handling functions.* Written by: ??** Modified for Crawl Reference by $Author$ on $Date$*/#include "AppHdr.h"REVISION("$Rev$");#include "crash.h"void init_crash_handler(){}void dump_crash_info(FILE* file){}void write_stack_trace(FILE* file, int ignore_count){}
/** File: crash-u.cc* Summary: UNIX specific crash handling functions.* Written by: Matthew Cline** Modified for Crawl Reference by $Author$ on $Date$*/#include "AppHdr.h"REVISION("$Rev$");#ifdef USE_UNIX_SIGNALS#include <signal.h>#endif#ifdef __GLIBC__#include <execinfo.h>#endif#include "crash.h"#include "externs.h"#include "state.h"#include "initfile.h"/////////////////////////////////////////////////////////////////////////////// Code for printing out debugging info on a crash.////////////////////////////////////////////////////////////////////////////static int _crash_signal = 0;static int _recursion_depth = 0;static void _crash_signal_handler(int sig_num){if (crawl_state.game_crashed){if (_recursion_depth > 0)return;_recursion_depth++;fprintf(stderr, "Recursive crash." EOL);std::string dir = (!Options.morgue_dir.empty() ? Options.morgue_dir :!SysEnv.crawl_dir.empty() ? SysEnv.crawl_dir: "");if (!dir.empty() && dir[dir.length() - 1] != FILE_SEPARATOR)dir += FILE_SEPARATOR;char name[180];sprintf(name, "%scrash-recursive-%s-%d.txt", dir.c_str(),you.your_name, (int) time(NULL));FILE* file = fopen(name, "w");if (file == NULL)file = stderr;write_stack_trace(file, 0);if (file != stderr)fclose(file);return;}_crash_signal = sig_num;crawl_state.game_crashed = true;// In case the crash dumper is unable to open a file and has to dump// to stderr.#ifndef USE_TILEunixcurses_shutdown();#endifdo_crash_dump();// Now crash for real.signal(sig_num, SIG_DFL);raise(sig_num);}void init_crash_handler(){#if defined(USE_UNIX_SIGNALS)for (int i = 1; i <= 64; i++){#ifdef SIGHUP_SAVEif (i == SIGHUP)continue;#endif#ifdef SIGQUITif (i == SIGQUIT)continue;#endif#ifdef SIGINTif (i == SIGINT)continue;#endif#ifdef SIGCHLDif (i == SIGCHLD)continue;#endif#ifdef SIGTSTPif (i == SIGTSTP)continue;#endif#ifdef SIGCONTif (i == SIGCONT)continue;#endif#ifdef SIGIOif (i == SIGIO)continue;#endif#ifdef SIGPROFif (i == SIGPROF)continue;#endifif (i == SIGWINCH)continue;signal(i, _crash_signal_handler);}#endif // if defined(USE_UNIX_SIGNALS)}void dump_crash_info(FILE* file){const char *name = strsignal(_crash_signal);if (name == NULL)name = "INVALID";fprintf(file, "Crash caused by signal #%d: %s" EOL, _crash_signal,name);}#ifdef __GLIBC__// NOTE: This should work on OS X, according to// http://developer.apple.com/DOCUMENTATION/DARWIN/Reference/ManPages/man3/backtrace_symbols.3.htmlvoid write_stack_trace(FILE* file, int ignore_count){void* frames[50];int num_frames = backtrace(frames, ARRAYSZ(frames));char **symbols = backtrace_symbols(frames, num_frames);if (symbols == NULL){fprintf(stderr, "Out of memroy." EOL);fprintf(file, "Out of memory." EOL);// backtrace_symbols_fd() can print out the stack trace even if// malloc() can't find any free memory.backtrace_symbols_fd(frames, num_frames, fileno(file));return;}for (int i = ignore_count; i < num_frames; i++){fprintf(file, "%s" EOL, symbols[i]);}free(symbols);}#else // ifdef __GLIBC__void write_stack_trace(FILE* file, int ignore_count){const char* msg = "Unable to get stack trace on this platform." EOL;fprintf(stderr, msg);fprintf(file, msg);}#endif
/** File: crash-d.cc* Summary: Dos specific crash handling functions.* Written by: ??** Modified for Crawl Reference by $Author$ on $Date$*/#include "AppHdr.h"REVISION("$Rev$");#include "crash.h"void init_crash_handler(){}void dump_crash_info(FILE* file){}void write_stack_trace(FILE* file, int ignore_count){}