From 05e73548645fecf95494fee4f75f7f7713bf870c Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 11 Nov 2011 08:09:48 +0000 Subject: * 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 . Thank you. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33705 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- vm_dump.c | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) (limited to 'vm_dump.c') diff --git a/vm_dump.c b/vm_dump.c index 5fd93548b2..1e59919e29 100644 --- a/vm_dump.c +++ b/vm_dump.c @@ -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 #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; iloaded_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"); -- cgit v1.2.3