PatchSet 4158 
Date: 2003/11/11 14:34:43
Author: dalibor
Branch: HEAD
Tag: (none) 
Log:
Small cleanup of gc code

Members: 
        ChangeLog:1.1750->1.1751 
        kaffe/kaffevm/mem/gc-mem.c:1.50->1.51 
        kaffe/kaffevm/mem/gc-mem.h:1.17->1.18 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.1750 kaffe/ChangeLog:1.1751
--- kaffe/ChangeLog:1.1750      Thu Nov  6 22:53:42 2003
+++ kaffe/ChangeLog     Tue Nov 11 14:34:43 2003
@@ -1,3 +1,19 @@
+2003-11-11  Dalibor Topic <[EMAIL PROTECTED]>
+
+       * kaffe/kaffevm/mem/gc-mem.c:
+       (gc_magic) new constant.
+       (gc_set_magic_marker, gc_check_magic_marker) New inline functions.
+       (gc_heap_alloc) Use gc_check_magic_marker.
+       (gc_block_end) new function.
+       (gc_get_prim_freelist) Check that index is >= 0 before accessing
+       array.
+       (gc_primitive_alloc) Use gc_block_end. Use gc_set_magic_marker.
+       (gc_primitive_free) Use gc_block_end.
+       (gc_heap_grow) Use gc_set_magic_marker.
+
+       * kaffe/kaffevm/mem/gc-mem.h:
+       (GC_MAGIC, GCBLOCKEND) Removed.
+
 2003-11-06 Ito Kazumitsu <[EMAIL PROTECTED]>
 
        libraries/javalib/gnu/xml/aelfred2/SAXDriver.java,
@@ -15,7 +31,6 @@
        (bind, connect) Same commentary.
 
 2003-11-03  Dalibor Topic  <[EMAIL PROTECTED]>
-
        * kaffe/kaffeh/support.c:
        (kaffeh_findClass) Changed type of buf to unsigned char* to
        fix -pedantic warnings.
Index: kaffe/kaffe/kaffevm/mem/gc-mem.c
diff -u kaffe/kaffe/kaffevm/mem/gc-mem.c:1.50 kaffe/kaffe/kaffevm/mem/gc-mem.c:1.51
--- kaffe/kaffe/kaffevm/mem/gc-mem.c:1.50       Fri Oct 10 20:05:56 2003
+++ kaffe/kaffe/kaffevm/mem/gc-mem.c    Tue Nov 11 14:34:45 2003
@@ -112,6 +112,23 @@
 extern struct Hjava_lang_Thread* garbageman;
 
 #ifdef KAFFE_VMDEBUG
+/* Magic constant used to mark blocks under gc's management */
+static const uint32 gc_magic = 0xD0DECADE;
+
+/* Set the magic marker of a block */
+static inline void
+gc_set_magic_marker(gc_block *b)
+{
+  b->magic = gc_magic;
+}
+
+/* Check the magic marker of a block */
+static inline bool
+gc_check_magic_marker(gc_block *b)
+{
+  return b->magic == gc_magic;
+}
+
 /*
  * analyze the slack incurred by small objects
  */
@@ -332,7 +349,7 @@
                mem = blk->free;
 
                DBG(GCDIAG,
-                   assert(blk->magic == GC_MAGIC);
+                   assert(gc_check_magic_marker(blk));
                    ASSERT_ONBLOCK(mem, blk);
                    if (mem->next) ASSERT_ONBLOCK(mem->next, blk));
 
@@ -393,7 +410,7 @@
 
        DBG(GCDIAG,
            gc_heap_check();
-           assert(info->magic == GC_MAGIC);
+           assert(gc_check_magic_marker(info));
            assert(GC_GET_COLOUR(info, idx) != GC_COLOUR_FREE));
 
        GC_SET_COLOUR(info, idx, GC_COLOUR_FREE);
@@ -486,7 +503,7 @@
        nr = (gc_pgsize-ROUNDUPALIGN(1))/(sz+2);
 
        /* Setup the meta-data for the block */
-       DBG(GCDIAG, info->magic = GC_MAGIC);
+       DBG(GCDIAG, gc_set_magic_marker(info));
 
        info->size = sz;
        info->nr = nr;
@@ -536,7 +553,7 @@
        }
 
        /* Setup the meta-data for the block */
-       DBG(GCDIAG, info->magic = GC_MAGIC);
+       DBG(GCDIAG, gc_set_magic_marker(info));
 
        info->size = sz;
        info->nr = 1;
@@ -601,6 +618,17 @@
   b->nr = 0;
 }
 
+/* Get the end a gc block
+ *
+ * This is OK, gc_prim_(alloc|free) never assume GCBLOCKEND is really
+ * a valid block
+ */
+static inline gc_block*
+gc_block_end(gc_block *b)
+{
+  return b + ((b->size+gc_pgsize-1)>>gc_pgbits);
+}
+
 /* return the prim list blk belongs to */
 static inline gc_block **
 gc_get_prim_freelist (gc_block *blk)
@@ -609,6 +637,7 @@
 
        if (sz <= GC_PRIM_LIST_COUNT)
        {
+               assert (sz > 0);
                return &gc_prim_freelist[sz-1];
        }
 
@@ -708,13 +737,13 @@
 
                        best_fit->size = sz;
                
-                       nptr = GCBLOCKEND(best_fit);
+                       nptr = gc_block_end(best_fit);
                        nptr->size = diff;
                        gc_block_rm (nptr);
 
                        DBG(GCPRIM, dprintf ("gc_primitive_alloc: splitted remaining 
0x%x bytes @ %p\n", (unsigned int)diff, nptr); )
 
-                       DBG(GCDIAG, nptr->magic = GC_MAGIC);
+                       DBG(GCDIAG, gc_set_magic_marker(nptr));
 
                        /* maintain list of primitive blocks */
                        nptr->pnext = best_fit->pnext;
@@ -785,12 +814,12 @@
 
        /*
         * Test whether this block is mergable with its successor.
-        * We need to do the GCBLOCKEND check, since the heap may not be a continuous
+        * We need to do the gc_block_end check, since the heap may not be a continuous
         * memory area and thus two consecutive blocks need not be mergable. 
         */
        if ((blk=mem->pnext) &&
            !GCBLOCKINUSE(blk) &&
-           GCBLOCKEND(mem)==blk) {
+           gc_block_end(mem)==blk) {
                DBG(GCPRIM, dprintf ("gc_primitive_free: merging %p with its successor 
(%p, %u)\n", mem, blk, blk->size);)
 
                gc_remove_from_prim_freelist(blk);
@@ -800,7 +829,7 @@
 
        if ((blk=mem->pprev) &&
            !GCBLOCKINUSE(blk) &&
-           GCBLOCKEND(blk)==mem) {
+           gc_block_end(blk)==mem) {
                DBG(GCPRIM, dprintf ("gc_primitive_free: merging %p with its 
predecessor (%p, %u)\n", mem, blk, blk->size); )
 
                gc_remove_from_prim_freelist(blk);
@@ -1075,7 +1104,7 @@
        assert(gc_heap_total <= gc_heap_limit);
 
        /* Place block into the freelist for subsequent use */
-       DBG(GCDIAG, blk->magic = GC_MAGIC);
+       DBG(GCDIAG, gc_set_magic_marker(blk));
        blk->size = sz;
 
        /* maintain list of primitive blocks */
Index: kaffe/kaffe/kaffevm/mem/gc-mem.h
diff -u kaffe/kaffe/kaffevm/mem/gc-mem.h:1.17 kaffe/kaffe/kaffevm/mem/gc-mem.h:1.18
--- kaffe/kaffe/kaffevm/mem/gc-mem.h:1.17       Sun Sep 28 19:47:41 2003
+++ kaffe/kaffe/kaffevm/mem/gc-mem.h    Tue Nov 11 14:34:45 2003
@@ -110,8 +110,6 @@
 
 /* ------------------------------------------------------------------------ */
 
-#define        GC_MAGIC                0xD0DECADE
-
 #define GC_BLOCKS              ((gc_block *) gc_block_base)
 
 /**
@@ -169,10 +167,6 @@
  */ 
 #define GCBLOCK2BASE(B)                (((char *)gc_heap_base) \
                                         + gc_pgsize * ((B) - GC_BLOCKS))
-
-/* This is OK, gc_prim_(alloc|free) never assume GCBLOCKEND is really
-   a valid block */
-#define GCBLOCKEND(B)          ((B) + (((B)->size+gc_pgsize-1)>>gc_pgbits))
 
 #define ASSERT_ONBLOCK(OBJ, BLK) assert(GCMEM2BLOCK(OBJ) == BLK)
 

_______________________________________________
kaffe mailing list
[EMAIL PROTECTED]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to