/* Record the program name */
ARGV0 = argv[0];
+ int new_argc = 0;
/* now parse the arguments */
for (int i = 1; i < argc;)
{
}
else
{
- printf("posarg: %s\n", argv[i]);
+ new_argc++;
+ argv[new_argc] = argv[i];
i++;
}
}
+ // return new_argc;
}
void Options_PrintHelp(void)
#define THOLD 0.65
#define DELETED ((void*)(intptr_t)-1)
-#define NUM_SLOTS 4u
#define LOG_SIZE 1023u
#define NUM_PRIMES (sizeof(Primes)/sizeof(unsigned int))
uintptr_t data[];
} object_t;
-typedef struct {
- void* slots[NUM_SLOTS];
-} bucket_t;
-
static void obj_addref(object_t* obj);
static void obj_delref(object_t* obj);
static void gc_collect(void);
Options_Parse(argc, argv);
Stack_Bot = &(intptr_t){0};
Log.index = 0;
- hash_init(&ZCT,0);
return usermain(argc, argv);
}
static void gc_scan_globals(hash_t* oldzct)
{
-#ifdef __APPLE__
- intptr_t rbeg = (intptr_t )get_edata();
- intptr_t rend = (intptr_t )get_end();
-#else
extern intptr_t etext, end;
intptr_t rbeg = (intptr_t)&etext;
intptr_t rend = (intptr_t)&end;
-#endif
intptr_t mask = sizeof(intptr_t)-1;
if (rbeg & mask)
{
{
rend = (rbeg & ~mask);
}
-#ifdef __APPLE__
- printf("%p %p %p %p-%p\n",
- (void*)get_etext(),
- (void*)get_edata(),
- (void*)get_end(),
- (void*)rbeg,
- (void*)rend
- );
-#else
- printf("%p %p %p-%p\n",
- (void*)&etext,
- (void*)&end,
- (void*)rbeg,
- (void*)rend
- );
-#endif
gc_scan_region(oldzct, (intptr_t*)rbeg, (intptr_t*)rend);
}
static void gc_collect(void)
{
+ /* init ZCT if needed */
+ if (!ZCT.thold)
+ {
+ hash_init(&ZCT, 0);
+ }
+
/* process the log */
for (uintptr_t i = 0; i < Log.index; i++)
{