/* testscriptA -- create arena, thr, and tramp; call testscriptB */ static void testscriptA(const char *script) { mps_arena_t arena; mps_thr_t thr; mps_tramp_t trampFunction; trampDataStruct trampData; void *trampResult; printf("Script: \"%s\"\n Create arena etc.\n", script); /* arena */ die(mps_arena_create(&arena, mps_arena_class_vm(), testArenaSIZE), "arena_create"); mps_arena_clamp(arena); /* thr: used to stop/restart multiple threads */ die(mps_thread_reg(&thr, arena), "thread"); /* tramp: used for protection (barrier hits) */ /* call testscriptB! */ trampFunction = testscriptB; trampData.arena = arena; trampData.thr = thr; trampData.script = script; mps_tramp(&trampResult, trampFunction, &trampData, sizeof trampData); mps_thread_dereg(thr); mps_arena_destroy(arena); printf(" Destroy arena etc.\n\n"); }
int main(int argc, char **argv) { mps_arena_t arena; mps_thr_t thread; mps_root_t reg_root; void *r; void *marker = ▮ randomize(argc, argv); die(mps_arena_create(&arena, mps_arena_class_vm(), TEST_ARENA_SIZE), "arena_create"); die(mps_thread_reg(&thread, arena), "thread_reg"); die(mps_root_create_reg(®_root, arena, MPS_RANK_AMBIG, (mps_rm_t)0, thread, &mps_stack_scan_ambig, marker, (size_t)0), "root_create_reg"); (mps_tramp)(&r, test, arena, 0); /* non-inlined trampoline */ mps_tramp(&r, test, arena, 0); mps_root_destroy(reg_root); mps_thread_dereg(thread); mps_arena_destroy(arena); fflush(stdout); /* synchronize */ fprintf(stderr, "\nConclusion: Failed to find any defects.\n"); return 0; }
static void *setup_thr(void *v) { struct guff_s guff; mps_arena_t arena = (mps_arena_t)v; mps_thr_t thread; void *r; die(mps_thread_reg(&thread, arena), "thread_reg"); guff.arena = arena; guff.thr = thread; mps_tramp(&r, setup, &guff, 0); mps_thread_dereg(thread); return r; }
int main(void) { mps_arena_t arena; mps_thr_t thread; void *r; die(mps_arena_create(&arena, mps_arena_class_vm(), testArenaSIZE), "arena_create\n"); die(mps_thread_reg(&thread, arena), "thread_reg\n"); mps_tramp(&r, test, arena, 0); mps_thread_dereg(thread); mps_arena_destroy(arena); fflush(stdout); /* synchronize */ return 0; }
MMError dylan_init_thread(void **rReturn, void *(*f)(void *, size_t), void *p, size_t s) { EXCEPTION_PREAMBLE() gc_teb_t gc_teb = current_gc_teb(); gc_teb->gc_teb_inside_tramp = 1; /* Go for it! */ mps_tramp(rReturn, f, p, s); gc_teb->gc_teb_inside_tramp = 0; EXCEPTION_POSTAMBLE() return MMSUCCESS; }
int main(int argc, char *argv[]) { mps_arena_t arena; mps_thr_t thread; void *r; testlib_init(argc, argv); die(mps_arena_create(&arena, mps_arena_class_vm(), testArenaSIZE), "arena_create\n"); die(mps_thread_reg(&thread, arena), "thread_reg\n"); mps_tramp(&r, test, arena, 0); mps_thread_dereg(thread); mps_arena_destroy(arena); printf("%s: Conclusion: Failed to find any defects.\n", argv[0]); return 0; }
int main(int argc, char **argv) { mps_arena_t arena; mps_thr_t thread; void *r; randomize(argc, argv); die(mps_arena_create(&arena, mps_arena_class_vm(), testArenaSIZE), "arena_create\n"); die(mps_thread_reg(&thread, arena), "thread_reg\n"); mps_tramp(&r, test, arena, 0); mps_thread_dereg(thread); mps_arena_destroy(arena); fflush(stdout); /* synchronize */ fprintf(stderr, "\nConclusion: Failed to find any defects.\n"); return 0; }
void *dylan_callin_handler(void *arg_base, size_t s) { void *res; EXCEPTION_PREAMBLE() gc_teb_t gc_teb = current_gc_teb(); int was_inside = gc_teb->gc_teb_inside_tramp; gc_teb->gc_teb_inside_tramp = 1; /* Go for it! */ mps_tramp(&res, dylan_callin_internal, arg_base, s); gc_teb->gc_teb_inside_tramp = was_inside; EXCEPTION_POSTAMBLE() return res; }
static void easy_tramp2(void (*f)(void)) { void *result; mps_tramp(&result, call_f, &f, (size_t)0); }