diff options
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | vm_dump.c | 34 |
2 files changed, 40 insertions, 8 deletions
@@ -1,3 +1,17 @@ +Fri Nov 11 17:09:45 2011 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * vm_dump.c (HAVE_BACKTRACE): fallback to 0. + + * vm_dump.c (rb_vm_bugreport): show "Other runtime information" + header only when available. + + * vm_dump.c (rb_vm_bugreport): get rid of modifying the content of + VM directly. + + * vm_dump.c (rb_vm_bugreport): check if vm is non-null. + Pointed out by Ikegami Daisuke <ikegami.da@gmail.com>. + Thank you. + Fri Nov 11 12:36:37 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com> * io.c (pipe_open): Remove fflush(stdin). it's no effect. @@ -593,6 +593,9 @@ bugreport_backtrace(void *arg, VALUE file, int line, VALUE method) #if defined(__FreeBSD__) && defined(__OPTIMIZE__) #undef HAVE_BACKTRACE #endif +#ifndef HAVE_BACKTRACE +#define HAVE_BACKTRACE 0 +#endif #if HAVE_BACKTRACE # include <execinfo.h> #elif defined(_WIN32) @@ -774,7 +777,15 @@ dump_thread(void *arg) void rb_vm_bugreport(void) { - rb_vm_t *vm = GET_VM(); +#ifdef __linux__ +# define PROC_MAPS_NAME "/proc/self/maps" +#endif +#ifdef PROC_MAPS_NAME + enum {other_runtime_info = 1}; +#else + enum {other_runtime_info = 0}; +#endif + const rb_vm_t *const vm = GET_VM(); if (vm) { int i = 0; SDR(); @@ -823,22 +834,29 @@ rb_vm_bugreport(void) fprintf(stderr, "\n"); #endif /* HAVE_BACKTRACE */ - fprintf(stderr, "-- Other runtime information " - "-----------------------------------------------\n\n"); - { + if (other_runtime_info || vm) { + fprintf(stderr, "-- Other runtime information " + "-----------------------------------------------\n\n"); + } + if (vm) { int i; + VALUE name; - fprintf(stderr, "* Loaded script: %s\n", StringValueCStr(vm->progname)); + name = vm->progname; + fprintf(stderr, "* Loaded script: %s\n", StringValueCStr(name)); fprintf(stderr, "\n"); fprintf(stderr, "* Loaded features:\n\n"); for (i=0; i<RARRAY_LEN(vm->loaded_features); i++) { - fprintf(stderr, " %4d %s\n", i, StringValueCStr(RARRAY_PTR(vm->loaded_features)[i])); + name = RARRAY_PTR(vm->loaded_features)[i]; + fprintf(stderr, " %4d %s\n", i, StringValueCStr(name)); } fprintf(stderr, "\n"); + } -#if __linux__ + { +#ifdef PROC_MAPS_NAME { - FILE *fp = fopen("/proc/self/maps", "r"); + FILE *fp = fopen(PROC_MAPS_NAME, "r"); if (fp) { fprintf(stderr, "* Process memory map:\n\n"); |