Possibly fixed Sparc bug. This fix will not work if the minimum tagged object size <= 4.

svn: r3208
This commit is contained in:
Adam Wick 2006-06-03 22:22:43 +00:00
parent 1159ef9df1
commit 45059127ab

View File

@ -1455,6 +1455,7 @@ inline static void mark_acc_big_page(struct mpage *page)
case PAGE_XTAGGED: GC_mark_xtagged(start); break;
case PAGE_TARRAY: {
unsigned short tag = *(unsigned short *)start;
end -= 1;
while(start < end) start += mark_table[tag](start);
break;
}
@ -1879,6 +1880,7 @@ inline static void internal_mark(void *p)
case PAGE_XTAGGED: GC_mark_xtagged(start); break;
case PAGE_TARRAY: {
unsigned short tag = *(unsigned short *)start;
end -= 1;
while(start < end) start += mark_table[tag](start);
break;
}
@ -1897,7 +1899,7 @@ inline static void internal_mark(void *p)
}
case PAGE_TARRAY: {
void **start = p;
void **end = PPTR(info) + info->size;
void **end = PPTR(info) + (info->size - 1);
unsigned short tag = *(unsigned short *)start;
while(start < end) start += mark_table[tag](start);
break;
@ -2184,6 +2186,7 @@ static void repair_heap(void)
break;
case PAGE_TARRAY: {
unsigned short tag = *(unsigned short *)start;
end -= 1;
while(start < end) start += fixup_table[tag](start);
break;
}
@ -2236,7 +2239,7 @@ static void repair_heap(void)
struct objhead *info = (struct objhead *)start;
size_t size = info->size;
if(info->mark) {
void **tempend = start++ + size;
void **tempend = start++ + (size - 1);
unsigned short tag = *(unsigned short*)start;
while(start < tempend)
start += fixup_table[tag](start);