- File:
-
- 1 edited
-
libcfa/src/concurrency/invoke.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/invoke.c
rac2b598 r09f357ec 29 29 // Called from the kernel when starting a coroutine or task so must switch back to user mode. 30 30 31 extern struct $coroutine * __cfactx_cor_finish(void); 32 extern void __cfactx_cor_leave ( struct $coroutine * ); 33 extern void __cfactx_thrd_leave(); 34 31 extern void __leave_coroutine ( struct coroutine_desc * ); 32 extern struct coroutine_desc * __finish_coroutine(void); 33 extern void __leave_thread_monitor(); 35 34 extern void disable_interrupts() OPTIONAL_THREAD; 36 35 extern void enable_interrupts( __cfaabi_dbg_ctx_param ); 37 36 38 void __cfactx_invoke_coroutine(37 void CtxInvokeCoroutine( 39 38 void (*main)(void *), 40 39 void *this 41 40 ) { 42 41 // Finish setting up the coroutine by setting its state 43 struct $coroutine * cor = __cfactx_cor_finish();42 struct coroutine_desc * cor = __finish_coroutine(); 44 43 45 44 // Call the main of the coroutine … … 47 46 48 47 //Final suspend, should never return 49 __ cfactx_cor_leave( cor );48 __leave_coroutine( cor ); 50 49 __cabi_abort( "Resumed dead coroutine" ); 51 50 } 52 51 53 static _Unwind_Reason_Code _ _cfactx_coroutine_unwindstop(52 static _Unwind_Reason_Code _CtxCoroutine_UnwindStop( 54 53 __attribute((__unused__)) int version, 55 54 _Unwind_Action actions, … … 62 61 // We finished unwinding the coroutine, 63 62 // leave it 64 __ cfactx_cor_leave( param );63 __leave_coroutine( param ); 65 64 __cabi_abort( "Resumed dead coroutine" ); 66 65 } … … 70 69 } 71 70 72 void _ _cfactx_coroutine_unwind(struct _Unwind_Exception * storage, struct $coroutine* cor) __attribute__ ((__noreturn__));73 void _ _cfactx_coroutine_unwind(struct _Unwind_Exception * storage, struct $coroutine* cor) {74 _Unwind_Reason_Code ret = _Unwind_ForcedUnwind( storage, _ _cfactx_coroutine_unwindstop, cor );71 void _CtxCoroutine_Unwind(struct _Unwind_Exception * storage, struct coroutine_desc * cor) __attribute__ ((__noreturn__)); 72 void _CtxCoroutine_Unwind(struct _Unwind_Exception * storage, struct coroutine_desc * cor) { 73 _Unwind_Reason_Code ret = _Unwind_ForcedUnwind( storage, _CtxCoroutine_UnwindStop, cor ); 75 74 printf("UNWIND ERROR %d after force unwind\n", ret); 76 75 abort(); 77 76 } 78 77 79 void __cfactx_invoke_thread(78 void CtxInvokeThread( 80 79 void (*main)(void *), 81 80 void *this … … 94 93 // The order of these 4 operations is very important 95 94 //Final suspend, should never return 96 __ cfactx_thrd_leave();95 __leave_thread_monitor(); 97 96 __cabi_abort( "Resumed dead thread" ); 98 97 } 99 98 100 void __cfactx_start(99 void CtxStart( 101 100 void (*main)(void *), 102 struct $coroutine* cor,101 struct coroutine_desc * cor, 103 102 void *this, 104 103 void (*invoke)(void *) … … 140 139 141 140 fs->dummyReturn = NULL; 142 fs->rturn = __cfactx_invoke_stub;141 fs->rturn = CtxInvokeStub; 143 142 fs->fixedRegisters[0] = main; 144 143 fs->fixedRegisters[1] = this; … … 158 157 struct FakeStack *fs = (struct FakeStack *)cor->context.SP; 159 158 160 fs->intRegs[8] = __cfactx_invoke_stub;159 fs->intRegs[8] = CtxInvokeStub; 161 160 fs->arg[0] = this; 162 161 fs->arg[1] = invoke;
Note:
See TracChangeset
for help on using the changeset viewer.