107 |
static int gc_start = 0; |
static int gc_start = 0; |
108 |
static int gc_recursive = 0; |
static int gc_recursive = 0; |
109 |
int runtime(void); |
int runtime(void); |
110 |
|
#ifdef SGC |
111 |
int sgc_enabled=0; |
int sgc_enabled=0; |
112 |
|
#endif |
113 |
int first_protectable_page =0; |
int first_protectable_page =0; |
114 |
|
|
115 |
|
|
1063 |
|
|
1064 |
int i, j; |
int i, j; |
1065 |
struct apage *pp, *qq; |
struct apage *pp, *qq; |
1066 |
|
#ifdef SGC |
1067 |
int in_sgc = sgc_enabled; |
int in_sgc = sgc_enabled; |
1068 |
|
#endif |
1069 |
#ifdef DEBUG |
#ifdef DEBUG |
1070 |
int tm=0; |
int tm=0; |
1071 |
#endif |
#endif |
1082 |
|
|
1083 |
if (saving_system) |
if (saving_system) |
1084 |
{t = t_contiguous; gc_time = -1; |
{t = t_contiguous; gc_time = -1; |
1085 |
|
#ifdef SGC |
1086 |
if(sgc_enabled) sgc_quit(); |
if(sgc_enabled) sgc_quit(); |
1087 |
|
#endif |
1088 |
} |
} |
1089 |
|
|
1090 |
|
|
1100 |
if (debug || (sSAnotify_gbcA->s.s_dbind != Cnil)) { |
if (debug || (sSAnotify_gbcA->s.s_dbind != Cnil)) { |
1101 |
|
|
1102 |
if (gc_time < 0) gc_time=0; |
if (gc_time < 0) gc_time=0; |
1103 |
|
#ifdef SGC |
1104 |
printf("[%s for %d %s pages..", |
printf("[%s for %d %s pages..", |
1105 |
(sgc_enabled ? "SGC" : "GC"), |
(sgc_enabled ? "SGC" : "GC"), |
1106 |
(sgc_enabled ? sgc_count_type(t) : tm_of(t)->tm_npage), |
(sgc_enabled ? sgc_count_type(t) : tm_of(t)->tm_npage), |
1107 |
(tm_table[(int)t].tm_name)+1); |
(tm_table[(int)t].tm_name)+1); |
1108 |
|
#else |
1109 |
|
printf("[%s for %d %s pages..", |
1110 |
|
("GC"), |
1111 |
|
(tm_of(t)->tm_npage), |
1112 |
|
(tm_table[(int)t].tm_name)+1); |
1113 |
|
#endif |
1114 |
#ifdef SGC |
#ifdef SGC |
1115 |
if(sgc_enabled) |
if(sgc_enabled) |
1116 |
printf("(%d writable)..",sgc_count_writable(page(core_end))); |
printf("(%d writable)..",sgc_count_writable(page(core_end))); |
1135 |
j = 0; |
j = 0; |
1136 |
/* if in sgc we don't need more pages below hole |
/* if in sgc we don't need more pages below hole |
1137 |
just more relocatable or cleaning it */ |
just more relocatable or cleaning it */ |
1138 |
if (sgc_enabled ==0 && holepage < new_holepage) |
#ifdef SGC |
1139 |
holepage = new_holepage; |
if (sgc_enabled==0) |
1140 |
|
#endif |
1141 |
|
if (holepage < new_holepage) |
1142 |
|
holepage = new_holepage; |
1143 |
|
|
1144 |
|
#ifdef SGC |
1145 |
i = rb_pointer - (sgc_enabled ? old_rb_start : rb_start); |
i = rb_pointer - (sgc_enabled ? old_rb_start : rb_start); |
1146 |
|
#else |
1147 |
|
i = rb_pointer - rb_start; |
1148 |
|
#endif |
1149 |
|
|
1150 |
if (nrbpage > (real_maxpage-page(heap_end) |
if (nrbpage > (real_maxpage-page(heap_end) |
1151 |
-holepage-real_maxpage/32)/2) { |
-holepage-real_maxpage/32)/2) { |
1152 |
if (i > nrbpage*PAGESIZE) |
if (i > nrbpage*PAGESIZE) |
1160 |
if (saving_system) |
if (saving_system) |
1161 |
rb_start = heap_end; |
rb_start = heap_end; |
1162 |
else |
else |
1163 |
|
#ifdef SGC |
1164 |
if (sgc_enabled==0) |
if (sgc_enabled==0) |
1165 |
|
#endif |
1166 |
{rb_start = heap_end + PAGESIZE*holepage;} |
{rb_start = heap_end + PAGESIZE*holepage;} |
1167 |
|
|
1168 |
rb_end = heap_end + (holepage + nrbpage) *PAGESIZE; |
rb_end = heap_end + (holepage + nrbpage) *PAGESIZE; |
1313 |
|
|
1314 |
interrupt_enable = TRUE; |
interrupt_enable = TRUE; |
1315 |
|
|
1316 |
|
#ifdef SGC |
1317 |
if (in_sgc && sgc_enabled==0) |
if (in_sgc && sgc_enabled==0) |
1318 |
sgc_start(); |
sgc_start(); |
1319 |
|
#endif |
1320 |
|
|
1321 |
if (saving_system) { |
if (saving_system) { |
1322 |
j = (rb_pointer-rb_start+PAGESIZE-1) / PAGESIZE; |
j = (rb_pointer-rb_start+PAGESIZE-1) / PAGESIZE; |
1348 |
ncb = 0; |
ncb = 0; |
1349 |
|
|
1350 |
/* hmm.... why is this test necessary.*/ |
/* hmm.... why is this test necessary.*/ |
1351 |
if (sgc_enabled==0) {holepage = new_holepage; |
#ifdef SGC |
1352 |
nrbpage = INIT_NRBPAGE;} |
if (sgc_enabled==0) |
1353 |
|
#endif |
1354 |
|
{holepage = new_holepage; |
1355 |
|
nrbpage = INIT_NRBPAGE;} |
1356 |
|
|
1357 |
if (nrbpage < 0) |
if (nrbpage < 0) |
1358 |
error("no relocatable pages left"); |
error("no relocatable pages left"); |