diff --git a/racket/src/racket/gc2/backtrace.c b/racket/src/racket/gc2/backtrace.c index 0be2659c1c..3c1078824b 100644 --- a/racket/src/racket/gc2/backtrace.c +++ b/racket/src/racket/gc2/backtrace.c @@ -50,6 +50,7 @@ static void *print_out_pointer(const char *prefix, void *p, GC_print_tagged_value_proc print_tagged_value, int *_kind) { + void *orig_p; trace_page_t *page; const char *what; @@ -58,10 +59,13 @@ static void *print_out_pointer(const char *prefix, void *p, GCPRINT(GCOUTF, "%s%s %p\n", prefix, trace_source_kind(*_kind), p); return NULL; } + orig_p = p; p = trace_pointer_start(page, p); if ((trace_page_type(page) == TRACE_PAGE_TAGGED) - || (trace_page_type(page) == TRACE_PAGE_PAIR)) { + || (trace_page_type(page) == TRACE_PAGE_PAIR) + || ((trace_page_type(page) == TRACE_PAGE_MED_NONATOMIC) + && (OBJPTR_TO_OBJHEAD(p)->type == PAGE_TAGGED))) { Type_Tag tag; tag = *(Type_Tag *)p; if ((tag >= 0) && get_type_name && get_type_name(tag)) { @@ -72,8 +76,19 @@ static void *print_out_pointer(const char *prefix, void *p, what = NULL; } else if (trace_page_type(page) == TRACE_PAGE_ARRAY) { what = "ARRAY"; + } else if ((trace_page_type(page) == TRACE_PAGE_MED_NONATOMIC) + && (OBJPTR_TO_OBJHEAD(p)->type == PAGE_ARRAY)) { + what = "MED_ARRAY"; + if (p != orig_p) { + GCPRINT(GCOUTF, "%s%s %p as %p\n", prefix, what, p, orig_p); + what = NULL; + } } else if (trace_page_type(page) == TRACE_PAGE_ATOMIC) { what = "ATOMIC"; + } else if (trace_page_type(page) == TRACE_PAGE_MED_ATOMIC) { + what = "MED_ATOMIC"; + } else if (trace_page_type(page) == TRACE_PAGE_MED_NONATOMIC) { + what = "MED_NONATOMIC"; } else if (trace_page_type(page) == TRACE_PAGE_MALLOCFREE) { what = "MALLOCED"; } else { diff --git a/racket/src/racket/gc2/newgc.c b/racket/src/racket/gc2/newgc.c index fcc7f31392..6270d4f529 100644 --- a/racket/src/racket/gc2/newgc.c +++ b/racket/src/racket/gc2/newgc.c @@ -5883,6 +5883,8 @@ static void *trace_pointer_start(mpage *page, void *p) { # define TRACE_PAGE_ATOMIC PAGE_ATOMIC # define TRACE_PAGE_PAIR PAGE_PAIR # define TRACE_PAGE_MALLOCFREE PAGE_TYPES +# define TRACE_PAGE_MED_ATOMIC PAGE_MED_ATOMIC +# define TRACE_PAGE_MED_NONATOMIC PAGE_MED_NONATOMIC # define TRACE_PAGE_BAD PAGE_TYPES # define trace_page_is_big(page) ((page)->size_class >= SIZE_CLASS_BIG_PAGE) # define trace_backpointer get_backtrace