Fix sizing of the modunion table on small heaps

Change-Id: I8696fb2f6d408049ec39609db34238edee171f79
diff --git a/vm/alloc/CardTable.c b/vm/alloc/CardTable.c
index 2de586e..533d5bc 100644
--- a/vm/alloc/CardTable.c
+++ b/vm/alloc/CardTable.c
@@ -80,18 +80,19 @@
     return true;
 }
 
-static bool allocModUnionTable(size_t heapMaximumSize)
+static bool allocModUnionTable(size_t heapSize)
 {
-    size_t length = heapMaximumSize / GC_CARD_SIZE / HB_BITS_PER_WORD;
-    assert(length * GC_CARD_SIZE * HB_BITS_PER_WORD == heapMaximumSize);
+    size_t cardsPerHeap = heapSize / GC_CARD_SIZE;
+    size_t byteLength = cardsPerHeap / CHAR_BIT;
+    assert(byteLength * GC_CARD_SIZE * CHAR_BIT == heapSize);
     int prot = PROT_READ | PROT_WRITE;
-    void *allocBase = dvmAllocRegion(length, prot, "dalvik-modunion-table");
+    void *allocBase = dvmAllocRegion(byteLength, prot, "dalvik-modunion-table");
     if (allocBase == NULL) {
         return false;
     }
     GcHeap *gcHeap = gDvm.gcHeap;
     gcHeap->modUnionTableBase = (u1*)allocBase;
-    gcHeap->modUnionTableLength = length;
+    gcHeap->modUnionTableLength = byteLength;
     return true;
 }