Skip to content

Instantly share code, notes, and snippets.

@dogbert17
Created April 8, 2018 17:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dogbert17/bf57ededfa513a7baf4e6f5f55191bdd to your computer and use it in GitHub Desktop.
Save dogbert17/bf57ededfa513a7baf4e6f5f55191bdd to your computer and use it in GitHub Desktop.
diff --git a/src/core/fixedsizealloc.c b/src/core/fixedsizealloc.c
index 21f89a4..78a0ff0 100644
--- a/src/core/fixedsizealloc.c
+++ b/src/core/fixedsizealloc.c
@@ -10,7 +10,7 @@
* behavior. */
/* Turn this on to switch to a mode where we debug by size. */
-#define FSA_SIZE_DEBUG 0
+#define FSA_SIZE_DEBUG 1
#if FSA_SIZE_DEBUG
typedef struct {
MVMuint64 alloc_size;
@@ -231,7 +231,7 @@ void * MVM_fixed_size_realloc(MVMThreadContext *tc, MVMFixedSizeAlloc *al, void
void * MVM_fixed_size_realloc_at_safepoint(MVMThreadContext *tc, MVMFixedSizeAlloc *al, void * p, size_t old_bytes, size_t new_bytes) {
#if FSA_SIZE_DEBUG
MVMFixedSizeAllocDebug *dbg = MVM_fixed_size_alloc(tc, al, new_bytes);
- memcpy(dbg->memory, (char *)p + sizeof(MVMuint64), new_bytes > old_bytes ? old_bytes : new_bytes);
+ memcpy(dbg->memory, (char *)p, new_bytes > old_bytes ? old_bytes : new_bytes);
MVM_fixed_size_free_at_safepoint(tc, al, old_bytes, p);
dbg->alloc_size = new_bytes;
return &(dbg->memory);
dogbert@dogbert-VirtualBox ~/repos/rakudo/nqp $ valgrind /home/dogbert/repos/rakudo/install/bin/moar nqp.moarvm t/p5regex/01-p5regex.t
==20003== Memcheck, a memory error detector
==20003== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==20003== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==20003== Command: /home/dogbert/repos/rakudo/install/bin/moar nqp.moarvm t/p5regex/01-p5regex.t
==20003==
# file: rx_basic
ok 1 - basic literal
ok 2 - basic multichar literal
ok 3 - basic dot
ok 4 - basic multidot
ok 5 - dot in mid pattern
ok 6 - failed literal match
ok 7 - failed literal match
ok 8 - failed dot match
ok 9 - scanning match
# done with file rx_basic
# file: rx_quantifiers
ok 10 - star 2+
ok 11 - star 1
ok 12 - star 0
ok 13 - star 2+
ok 14 - star 1
ok 15 - star 0
ok 16 - plus 2+
ok 17 - plus 1
==20003== Conditional jump or move depends on uninitialised value(s)
==20003== at 0x4C324BD: memcpy@@GLIBC_2.14 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20003== by 0x50340CD: memcpy (string3.h:53)
==20003== by 0x50340CD: MVM_fixed_size_realloc_at_safepoint (fixedsizealloc.c:234)
==20003== by 0x50866E9: MVM_sc_add_all_scs_entry (sc.c:71)
==20003== by 0x5086B0F: MVM_sc_create (sc.c:11)
==20003== by 0x50051FC: MVM_interp_run (interp.c:3023)
==20003== by 0x50F8553: MVM_vm_run_file (moar.c:407)
==20003== by 0x40121A: main (main.c:299)
==20003==
==20003== Conditional jump or move depends on uninitialised value(s)
==20003== at 0x4C3277C: memcpy@@GLIBC_2.14 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20003== by 0x50340CD: memcpy (string3.h:53)
==20003== by 0x50340CD: MVM_fixed_size_realloc_at_safepoint (fixedsizealloc.c:234)
==20003== by 0x50866E9: MVM_sc_add_all_scs_entry (sc.c:71)
==20003== by 0x5086B0F: MVM_sc_create (sc.c:11)
==20003== by 0x50051FC: MVM_interp_run (interp.c:3023)
==20003== by 0x50F8553: MVM_vm_run_file (moar.c:407)
==20003== by 0x40121A: main (main.c:299)
==20003==
==20003== Conditional jump or move depends on uninitialised value(s)
==20003== at 0x4C3251E: memcpy@@GLIBC_2.14 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20003== by 0x50340CD: memcpy (string3.h:53)
==20003== by 0x50340CD: MVM_fixed_size_realloc_at_safepoint (fixedsizealloc.c:234)
==20003== by 0x50866E9: MVM_sc_add_all_scs_entry (sc.c:71)
==20003== by 0x5086B0F: MVM_sc_create (sc.c:11)
==20003== by 0x50051FC: MVM_interp_run (interp.c:3023)
==20003== by 0x50F8553: MVM_vm_run_file (moar.c:407)
==20003== by 0x40121A: main (main.c:299)
==20003==
==20003== Conditional jump or move depends on uninitialised value(s)
==20003== at 0x4C3252F: memcpy@@GLIBC_2.14 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20003== by 0x50340CD: memcpy (string3.h:53)
==20003== by 0x50340CD: MVM_fixed_size_realloc_at_safepoint (fixedsizealloc.c:234)
==20003== by 0x50866E9: MVM_sc_add_all_scs_entry (sc.c:71)
==20003== by 0x5086B0F: MVM_sc_create (sc.c:11)
==20003== by 0x50051FC: MVM_interp_run (interp.c:3023)
==20003== by 0x50F8553: MVM_vm_run_file (moar.c:407)
==20003== by 0x40121A: main (main.c:299)
==20003==
==20003== Conditional jump or move depends on uninitialised value(s)
==20003== at 0x4C32545: memcpy@@GLIBC_2.14 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20003== by 0x50340CD: memcpy (string3.h:53)
==20003== by 0x50340CD: MVM_fixed_size_realloc_at_safepoint (fixedsizealloc.c:234)
==20003== by 0x50866E9: MVM_sc_add_all_scs_entry (sc.c:71)
==20003== by 0x5086B0F: MVM_sc_create (sc.c:11)
==20003== by 0x50051FC: MVM_interp_run (interp.c:3023)
==20003== by 0x50F8553: MVM_vm_run_file (moar.c:407)
==20003== by 0x40121A: main (main.c:299)
==20003==
==20003== Conditional jump or move depends on uninitialised value(s)
==20003== at 0x4C32678: memcpy@@GLIBC_2.14 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20003== by 0x50340CD: memcpy (string3.h:53)
==20003== by 0x50340CD: MVM_fixed_size_realloc_at_safepoint (fixedsizealloc.c:234)
==20003== by 0x50866E9: MVM_sc_add_all_scs_entry (sc.c:71)
==20003== by 0x5086B0F: MVM_sc_create (sc.c:11)
==20003== by 0x50051FC: MVM_interp_run (interp.c:3023)
==20003== by 0x50F8553: MVM_vm_run_file (moar.c:407)
==20003== by 0x40121A: main (main.c:299)
==20003==
==20003== Use of uninitialised value of size 8
==20003== at 0x4C326CB: memcpy@@GLIBC_2.14 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20003== by 0x50340CD: memcpy (string3.h:53)
==20003== by 0x50340CD: MVM_fixed_size_realloc_at_safepoint (fixedsizealloc.c:234)
==20003== by 0x50866E9: MVM_sc_add_all_scs_entry (sc.c:71)
==20003== by 0x5086B0F: MVM_sc_create (sc.c:11)
==20003== by 0x50051FC: MVM_interp_run (interp.c:3023)
==20003== by 0x50F8553: MVM_vm_run_file (moar.c:407)
==20003== by 0x40121A: main (main.c:299)
==20003==
==20003== Invalid write of size 8
==20003== at 0x4C326CB: memcpy@@GLIBC_2.14 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20003== by 0x50340CD: memcpy (string3.h:53)
==20003== by 0x50340CD: MVM_fixed_size_realloc_at_safepoint (fixedsizealloc.c:234)
==20003== by 0x50866E9: MVM_sc_add_all_scs_entry (sc.c:71)
==20003== by 0x5086B0F: MVM_sc_create (sc.c:11)
==20003== by 0x50051FC: MVM_interp_run (interp.c:3023)
==20003== by 0x50F8553: MVM_vm_run_file (moar.c:407)
==20003== by 0x40121A: main (main.c:299)
==20003== Address 0x8895d90 is 0 bytes after a block of size 48 alloc'd
==20003== at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20003== by 0x50AB6B6: MVM_calloc (alloc.h:11)
==20003== by 0x50AB6B6: sim_stack_push (stats.c:250)
==20003== by 0x50AC0A0: MVM_spesh_stats_update (stats.c:535)
==20003== by 0x50AA838: worker (worker.c:16)
==20003== by 0x50276E0: thread_initial_invoke (threads.c:59)
==20003== by 0x5003A1D: MVM_interp_run (interp.c:93)
==20003== by 0x5027765: start_thread (threads.c:87)
==20003== by 0x5E756B9: start_thread (pthread_create.c:333)
==20003==
==20003== Use of uninitialised value of size 8
==20003== at 0x50181DF: MVM_interp_run (interp.c:3035)
==20003== by 0x50F8553: MVM_vm_run_file (moar.c:407)
==20003== by 0x40121A: main (main.c:299)
==20003==
==20003== Invalid read of size 8
==20003== at 0x50181DF: MVM_interp_run (interp.c:3035)
==20003== by 0x50F8553: MVM_vm_run_file (moar.c:407)
==20003== by 0x40121A: main (main.c:299)
==20003== Address 0x8888bf0 is 16 bytes before a block of size 32 alloc'd
==20003== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20003== by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20003== by 0x50AB07E: MVM_realloc (alloc.h:20)
==20003== by 0x50AB07E: by_type (stats.c:107)
==20003== by 0x50ABA74: incorporate_stats (stats.c:301)
==20003== by 0x50AC0E5: MVM_spesh_stats_update (stats.c:602)
==20003== by 0x50AA838: worker (worker.c:16)
==20003== by 0x50276E0: thread_initial_invoke (threads.c:59)
==20003== by 0x5003A1D: MVM_interp_run (interp.c:93)
==20003== by 0x5027765: start_thread (threads.c:87)
==20003== by 0x5E756B9: start_thread (pthread_create.c:333)
==20003==
==20003== Use of uninitialised value of size 8
==20003== at 0x5004E05: MVM_sc_get_collectable_sc (sc.h:78)
==20003== by 0x5004E05: MVM_sc_get_obj_sc (sc.h:83)
==20003== by 0x5004E05: MVM_interp_run (interp.c:3117)
==20003== by 0x50F8553: MVM_vm_run_file (moar.c:407)
==20003== by 0x40121A: main (main.c:299)
==20003==
==20003== Invalid read of size 8
==20003== at 0x5004E05: MVM_sc_get_collectable_sc (sc.h:78)
==20003== by 0x5004E05: MVM_sc_get_obj_sc (sc.h:83)
==20003== by 0x5004E05: MVM_interp_run (interp.c:3117)
==20003== by 0x50F8553: MVM_vm_run_file (moar.c:407)
==20003== by 0x40121A: main (main.c:299)
==20003== Address 0x8888bf0 is 16 bytes before a block of size 32 alloc'd
==20003== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20003== by 0x4C2FDEF: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20003== by 0x50AB07E: MVM_realloc (alloc.h:20)
==20003== by 0x50AB07E: by_type (stats.c:107)
==20003== by 0x50ABA74: incorporate_stats (stats.c:301)
==20003== by 0x50AC0E5: MVM_spesh_stats_update (stats.c:602)
==20003== by 0x50AA838: worker (worker.c:16)
==20003== by 0x50276E0: thread_initial_invoke (threads.c:59)
==20003== by 0x5003A1D: MVM_interp_run (interp.c:93)
==20003== by 0x5027765: start_thread (threads.c:87)
==20003== by 0x5E756B9: start_thread (pthread_create.c:333)
==20003==
not ok 18 - plus 0
# ERROR: Object of type NQPRegex in QAST::WVal, but not in SC
not ok 19 - plus 2+
MoarVM panic: Spesh arg guard: unimplemented sparse guard case
==20003==
==20003== HEAP SUMMARY:
==20003== in use at exit: 24,601,456 bytes in 75,518 blocks
==20003== total heap usage: 296,031 allocs, 220,513 frees, 92,300,717 bytes allocated
==20003==
==20003== LEAK SUMMARY:
==20003== definitely lost: 0 bytes in 0 blocks
==20003== indirectly lost: 0 bytes in 0 blocks
==20003== possibly lost: 808,000 bytes in 14,413 blocks
==20003== still reachable: 23,793,456 bytes in 61,105 blocks
==20003== of which reachable via heuristic:
==20003== length64 : 512,720 bytes in 7,591 blocks
==20003== suppressed: 0 bytes in 0 blocks
==20003== Rerun with --leak-check=full to see details of leaked memory
==20003==
==20003== For counts of detected and suppressed errors, rerun with: -v
==20003== Use --track-origins=yes to see where uninitialised values come from
==20003== ERROR SUMMARY: 49 errors from 12 contexts (suppressed: 0 from 0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment