From 3073c994f54cc755b897b495b538fe3cf1667e14 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 12 Mar 2012 10:59:47 -0600 Subject: [PATCH] make GC backtrace show eq hash code --- src/racket/src/salloc.c | 16 +++++++++++----- src/racket/src/schpriv.h | 4 ++++ src/racket/src/thread.c | 4 ---- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/racket/src/salloc.c b/src/racket/src/salloc.c index 47bc97911d..44676a79d4 100644 --- a/src/racket/src/salloc.c +++ b/src/racket/src/salloc.c @@ -1951,14 +1951,19 @@ static void print_tagged_value(const char *prefix, const char *suffix) { char buffer[256]; - char *type, *sep, diffstr[30]; + char *type, *sep, diffstr[30], hashstr[30]; intptr_t len; + const char *hash_code = ""; sep = ""; scheme_check_print_is_obj = check_home; if (!xtagged) { + if (SCHEME_TYPE(v) > _scheme_compiled_values_types_) { + sprintf(hashstr, "{%" PRIdPTR "}", scheme_hash_key(v)); + hash_code = hashstr; + } type = scheme_write_to_string_w_max((Scheme_Object *)v, &len, max_w); if (!scheme_strncmp(type, "#') || (type[8] == ':'))) { @@ -2135,11 +2140,12 @@ static void print_tagged_value(const char *prefix, if (diff) sprintf(diffstr, "%lx", diff); - + object_console_printf(stderr, - "%s%p%s%s%s%s%s", + "%s%p%s%s%s%s%s%s", prefix, v, + hash_code, sep, type, diff ? "+" : "", @@ -2163,13 +2169,13 @@ Scheme_Object *scheme_dump_gc_stats(int c, Scheme_Object *p[]) #if MZ_PRECISE_GC_TRACE int trace_for_tag = 0; int flags = 0; - int path_length_limit = 1000; + int path_length_limit = 10000; GC_for_each_found_proc for_each_found = NULL; #else # ifndef USE_TAGGED_ALLOCATION # define flags 0 # define trace_for_tag 0 -# define path_length_limit 1000 +# define path_length_limit 10000 # define for_each_found NULL # define GC_get_xtagged_name NULL # define print_tagged_value NULL diff --git a/src/racket/src/schpriv.h b/src/racket/src/schpriv.h index 67cd57c1b2..2e47da2db3 100644 --- a/src/racket/src/schpriv.h +++ b/src/racket/src/schpriv.h @@ -136,6 +136,10 @@ uintptr_t scheme_get_primordial_thread_stack_base(void); uintptr_t scheme_get_current_os_thread_stack_base(void); void scheme_set_current_os_thread_stack_base(void *base); +#ifdef MZ_PRECISE_GC +uintptr_t scheme_get_current_thread_stack_start(void); +#endif + int scheme_propagate_ephemeron_marks(void); void scheme_clear_ephemerons(void); diff --git a/src/racket/src/thread.c b/src/racket/src/thread.c index af8489072a..5b41a38ce2 100644 --- a/src/racket/src/thread.c +++ b/src/racket/src/thread.c @@ -456,10 +456,6 @@ extern BOOL WINAPI DllMain(HINSTANCE inst, ULONG reason, LPVOID reserved); # define scheme_thread_hop_type scheme_thread_type #endif -#ifdef MZ_PRECISE_GC -uintptr_t scheme_get_current_thread_stack_start(void); -#endif - SHARED_OK Scheme_Object *initial_cmdline_vec; /*========================================================================*/