[add support for valgrind annotations for debugging the GC
John Meacham <john@repetae.net>**20100721054246
 Ignore-this: 5e5fc34917b81b56586f3067fd76e12e
] addfile ./utils/debug.sh
hunk ./src/rts/jhc_jgc.c 139
+                        assert(GET_PTYPE(ptr) == P_LAZY);
+                        VALGRIND_MAKE_MEM_DEFINED(FROM_SPTR(ptr), sizeof(uintptr_t));
hunk ./src/rts/jhc_jgc.c 165
+                VALGRIND_MAKE_MEM_DEFINED(e,pg->pi.size * sizeof(uintptr_t));
hunk ./src/rts/jhc_jgc.c 171
+                                VALGRIND_MAKE_MEM_DEFINED(FROM_SPTR(e->ptrs[i]), sizeof(uintptr_t));
hunk ./src/rts/jhc_jgc.c 216
+        VALGRIND_MAKE_MEM_UNDEFINED(e,sizeof(uintptr_t)*count);
hunk ./src/rts/jhc_jgc.c 227
+        VALGRIND_PRINTF("Jhc-Valgrind mode active.\n");
hunk ./src/rts/jhc_jgc.c 234
-        }
-        for(int i = 0; nh_stuff[i]; i++) {
-                if(nh_stuff[i] < nh_start)
-                        nh_start = nh_stuff[i];
-                if(nh_stuff[i] > nh_end)
-                        nh_end = nh_stuff[i];
+                for(int i = 1; nh_stuff[i]; i++) {
+                        if(nh_stuff[i] < nh_start)
+                                nh_start = nh_stuff[i];
+                        if(nh_stuff[i] > nh_end)
+                                nh_end = nh_stuff[i];
+                }
hunk ./src/rts/slub.c 3
+#ifdef JHC_VALGRIND
+#include <valgrind/valgrind.h>
+#include <valgrind/memcheck.h>
+#else
+#define VALGRIND_MAKE_MEM_UNDEFINED(x,y) \
+    do { } while (0)
+#define VALGRIND_MAKE_MEM_DEFINED(x,y) \
+    do { } while (0)
+#define VALGRIND_MAKE_MEM_NOACCESS(x,y) \
+    do { } while (0)
+#define VALGRIND_PRINTF(...) \
+    do { } while (0)
+#endif
+
hunk ./src/rts/slub.c 128
+        VALGRIND_MAKE_MEM_NOACCESS(mb->base,MEGABLOCK_SIZE);
+        //VALGRIND_FREELIKE_BLOCK(mb->base,0);
hunk ./src/rts/slub.c 162
+                VALGRIND_MAKE_MEM_UNDEFINED(pg,sizeof(struct s_block));
hunk ./src/rts/slub.c 165
-
hunk ./src/rts/slub.c 197
+                                VALGRIND_MAKE_MEM_NOACCESS((char *)pg + sizeof(struct s_block), BLOCK_SIZE - sizeof(struct s_block));
hunk ./src/rts/slub.c 230
+        unsigned header =  sizeof(struct s_block) + BITARRAY_SIZE_IN_BYTES(num_entries);
+        VALGRIND_MAKE_MEM_NOACCESS((char *)pg + header, BLOCK_SIZE - header);
hunk ./src/rts/slub.c 240
+                //VALGRIND_MALLOCLIKE_BLOCK(pg,sizeof(struct s_block) + BITARRAY_SIZE_IN_BYTES(sc->num_entries), 0, 0);
+                VALGRIND_MAKE_MEM_UNDEFINED((char *)pg->used,BITARRAY_SIZE_IN_BYTES(sc->num_entries));
hunk ./utils/debug.gdb 5
+define pblock
+    print *(struct s_block *)((uintptr_t)$arg0 & ~(0xFFF))
+end
hunk ./utils/debug.sh 1
+valgrind --db-command=cgdb  -x utils/debug.gdb -nw %f %p --db-attach=yes ./hs.out 2000