-
-
Save MasterDuke17/768644375e173390a6f2ca3ad1be78c4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/src/gc/allocation.c b/src/gc/allocation.c | |
index 06a37ffad..30901b7ab 100644 | |
--- a/src/gc/allocation.c | |
+++ b/src/gc/allocation.c | |
@@ -4,6 +4,7 @@ | |
* its REPR gc_free routine. */ | |
#include "moar.h" | |
+#include "memdebug.h" | |
/* Allocate the specified amount of memory from the nursery. Will | |
* trigger a GC run if there is not enough. */ | |
@@ -88,6 +89,9 @@ MVMObject * MVM_gc_allocate_object(MVMThreadContext *tc, MVMSTable *st) { | |
MVMObject *obj; | |
MVMROOT(tc, st, { | |
obj = MVM_gc_allocate_zeroed(tc, st->size); | |
+#ifdef MVM_VALGRIND_SUPPORT | |
+ VALGRIND_CREATE_BLOCK(obj, st->size, st->debug_name); | |
+#endif | |
obj->header.size = (MVMuint16)st->size; | |
obj->header.owner = tc->thread_id; | |
MVM_ASSIGN_REF(tc, &(obj->header), obj->st, st); | |
diff --git a/src/gc/debug.h b/src/gc/debug.h | |
index 1dd4f17bb..6daf4c9ef 100644 | |
--- a/src/gc/debug.h | |
+++ b/src/gc/debug.h | |
@@ -3,7 +3,7 @@ | |
* 1 = Checks on reference assignments and other relatively cheap cases | |
* 2 = Checks on every object register access (slow) | |
*/ | |
-#define MVM_GC_DEBUG 0 | |
+#define MVM_GC_DEBUG 2 | |
#if MVM_GC_DEBUG | |
#define MVM_ASSERT_NOT_FROMSPACE(tc, c) do { \ | |
diff --git a/src/gc/worklist.h b/src/gc/worklist.h | |
index 062f383d8..9725ca934 100644 | |
--- a/src/gc/worklist.h | |
+++ b/src/gc/worklist.h | |
@@ -1,3 +1,4 @@ | |
+#include "memdebug.h" | |
/* A worklist holds the current set of pointers we have got in the queue | |
* to scan. We hide away the details of it behind this abstraction since | |
* the order in which we hand things back from it can have a big influence | |
@@ -48,9 +49,12 @@ struct MVMGCWorklist { | |
else if (((*item_to_add)->flags & MVM_CF_STABLE) == 0 && !STABLE(*item_to_add)) \ | |
MVM_panic(1, "NULL STable in item added to GC worklist"); \ | |
if ((char *)*item_to_add >= (char *)tc->nursery_alloc && \ | |
- (char *)*item_to_add < (char *)tc->nursery_alloc_limit) \ | |
+ (char *)*item_to_add < (char *)tc->nursery_alloc_limit) { \ | |
+ char command[128]; snprintf(&command, 128, "who_points_at %p", *item_to_add); VALGRIND_MONITOR_COMMAND(command); \ | |
+ VALGRIND_PRINTF_BACKTRACE("valgrind gc_worklist_add: Adding pointer %p to past fromspace to GC worklist", *item_to_add); \ | |
MVM_panic(1, "Adding pointer %p to past fromspace to GC worklist", \ | |
*item_to_add); \ | |
+ } \ | |
} \ | |
if (*item_to_add && (worklist->include_gen2 || !((*item_to_add)->flags & MVM_CF_SECOND_GEN))) { \ | |
if (worklist->items == worklist->alloc) \ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[dan@alexandria p6-mqtt]$ MVM_JIT_DISABLE=1 pv6 --profile -I lib/ t/regex.t | |
================================================================================================ | |
This is Rakudo Perl 6 running in valgrind, a tool for debugging and profiling programs. | |
Running a program in valgrind usually takes *a lot* more time than running it directly, | |
so please be patient. | |
Valgrind options can be added with MVM_VALGRIND_OPTS environment variable. | |
This Rakudo version is 2019.03.1.248.g.4.e.677.f.048 built on MoarVM version 2019.03.102.g.423.a.9.cc.7.d, | |
running on arch (5.0.8.arch.1.1.arch) / linux (1.SMP.PREEMPT.Wed.Mar.27.17.53.10.UTC.2019) | |
------------------------------------------------------------------------------------------------ | |
==13645== Memcheck, a memory error detector | |
==13645== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. | |
==13645== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info | |
==13645== Command: /home/dan/Source/perl6/install/bin/perl6-m --profile -I lib/ t/regex.t | |
==13645== | |
ok 1 - 4.7.1.2, 'sport/tennis/player1' should match 'sport/tennis/player1/ \#' | |
ok 2 - 4.7.1.2, 'sport/tennis/player1/ranking' should match 'sport/tennis/player1/ \#' | |
ok 3 - 4.7.1.2, 'sport/tennis/player1/wimbledon' should match 'sport/tennis/player1/ \#' | |
ok 4 - 4.7.1.2, 'sport' should match 'sport/ \#' | |
ok 5 - 4.7.1.3, 'sport/tennis/player1' should match 'sport/tennis/+' | |
ok 6 - 4.7.1.3, 'sport/tennis/player2' should match 'sport/tennis/+' | |
ok 7 - 4.7.1.3, 'sport/tennis/player1/ranking' should not match 'sport/tennis/+' | |
ok 8 - 4.7.1.3, 'sport' should not match 'sport/+' | |
ok 9 - 4.7.1.3, 'sport/' should match 'sport/+' | |
ok 10 - 4.7.2.1, '$SYS/something' should not match ' \#' | |
ok 11 - 4.7.2.1, '$SYS/monitor/Clients' should not match '+/monitor/Clients' | |
==13645== Searching for pointers to 0x5981148 | |
==13645== *0x59810f8 points at 0x5981148 | |
==13645== Address 0x59810f8 is 8 bytes inside a BOOTCode of size 72 client-defined | |
==13645== at 0x4A7B8E7: MVM_gc_allocate_object (allocation.c:90) | |
==13645== by 0x4A563AB: MVM_frame_takeclosure (frame.c:1195) | |
==13645== by 0x4A40E47: MVM_interp_run (interp.c:1230) | |
==13645== by 0x4B5DFA4: MVM_vm_run_file (moar.c:444) | |
==13645== by 0x109FB8: main (main.c:341) | |
==13645== *0xc2f2920 points at 0x5981148 | |
==13645== Address 0xc2f2920 is 1,632 bytes inside a block of size 2,112 alloc'd | |
==13645== at 0x483AD7B: realloc (vg_replace_malloc.c:826) | |
==13645== by 0x4B568E8: MVM_realloc (alloc.h:20) | |
==13645== by 0x4B568E8: MVM_profiler_log_gc_deallocate (log.c:320) | |
==13645== by 0x4A840D0: MVM_gc_collect_free_nursery_uncopied (collect.c:628) | |
==13645== by 0x4A7A6CE: finish_gc (orchestrate.c:237) | |
==13645== by 0x4A7A6CE: run_gc (orchestrate.c:412) | |
==13645== by 0x4A7B1CE: MVM_gc_enter_from_allocator (orchestrate.c:525) | |
==13645== by 0x4A7B545: MVM_gc_allocate_nursery (allocation.c:36) | |
==13645== by 0x4A7B890: MVM_gc_allocate_object (allocation.c:90) | |
==13645== by 0x4A1E171: MVM_args_set_result_str (args.c:543) | |
==13645== by 0x4A2CED2: MVM_interp_run (interp.c:528) | |
==13645== by 0x4B5DFA4: MVM_vm_run_file (moar.c:444) | |
==13645== by 0x109FB8: main (main.c:341) | |
==13645== tid 1 register R11 pointing at 0x5981148 | |
**13645** valgrind gc_worklist_add: Adding pointer 0x5981148 to past fromspace to GC worklist at 0x4B53425: VALGRIND_PRINTF_BACKTRACE.constprop.6 (valgrind.h:6306) | |
==13645== by 0x4B55B49: mark_gc_entries (instrument.c:807) | |
==13645== by 0x4B55B49: MVM_profile_instrumented_mark_data (instrument.c:830) | |
==13645== by 0x4A7E967: MVM_gc_root_add_tc_roots_to_worklist (roots.c:191) | |
==13645== by 0x4A83A37: MVM_gc_collect (collect.c:121) | |
==13645== by 0x4A7A5AE: run_gc (orchestrate.c:408) | |
==13645== by 0x4A7B1CE: MVM_gc_enter_from_allocator (orchestrate.c:525) | |
==13645== by 0x4A7B545: MVM_gc_allocate_nursery (allocation.c:36) | |
==13645== by 0x4A7B890: MVM_gc_allocate_object (allocation.c:90) | |
==13645== by 0x4A39E46: MVM_interp_run (interp.c:1869) | |
==13645== by 0x4B5DFA4: MVM_vm_run_file (moar.c:444) | |
==13645== by 0x109FB8: main (main.c:341) | |
MoarVM panic: Adding pointer 0x5981148 to past fromspace to GC worklist | |
==13645== | |
==13645== HEAP SUMMARY: | |
==13645== in use at exit: 94,844,289 bytes in 312,884 blocks | |
==13645== total heap usage: 900,937 allocs, 355,987 frees, 389,570,882 bytes allocated | |
==13645== |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment