- File:
-
- 1 edited
-
src/libcfa/concurrency/invoke.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/concurrency/invoke.c
r8761006c r0157ca7 28 28 // Called from the kernel when starting a coroutine or task so must switch back to user mode. 29 29 30 extern void __suspend_ internal(void);31 extern void __ thread_signal_termination(struct thread*);30 extern void __suspend_no_inline__F___1(void); 31 extern void __signal_termination__F_P7sthread__1(struct thread*); 32 32 33 33 void CtxInvokeCoroutine( … … 41 41 42 42 if(cor->state == Primed) { 43 __suspend_ internal();43 __suspend_no_inline__F___1(); 44 44 } 45 45 … … 52 52 53 53 //Final suspend, should never return 54 __suspend_ internal();55 a bortf("Resumed dead coroutine");54 __suspend_no_inline__F___1(); 55 assertf(false, "Resumed dead coroutine"); 56 56 } 57 57 … … 61 61 void *this 62 62 ) { 63 __suspend_internal(); 63 // LIB_DEBUG_PRINTF("Invoke Thread : Received %p (main %p, get_t %p)\n", this, main, get_thread); 64 65 __suspend_no_inline__F___1(); 64 66 65 67 struct thread* thrd = get_thread( this ); … … 70 72 main( this ); 71 73 72 __ thread_signal_termination(thrd);74 __signal_termination__F_P7sthread__1(thrd); 73 75 74 76 //Final suspend, should never return 75 __suspend_ internal();76 a bortf("Resumed dead thread");77 __suspend_no_inline__F___1(); 78 assertf(false, "Resumed dead thread"); 77 79 } 78 80 … … 109 111 struct FakeStack { 110 112 void *fixedRegisters[5]; // fixed registers rbx, r12, r13, r14, r15 111 uint32_t mxcr; // SSE Status and Control bits (control bits are preserved across function calls) 112 uint16_t fcw; // X97 FPU control word (preserved across function calls) 113 void *rturn; // where to go on return from uSwitch 113 void *rturn; // where to go on return from uSwitch 114 114 void *dummyReturn; // NULL return address to provide proper alignment 115 115 }; … … 122 122 ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fixedRegisters[0] = this; 123 123 ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fixedRegisters[1] = invoke; 124 ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->mxcr = 0x1F80; //Vol. 2A 3-520125 ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fcw = 0x037F; //Vol. 1 8-7126 124 #else 127 125 #error Only __i386__ and __x86_64__ is supported for threads in cfa
Note:
See TracChangeset
for help on using the changeset viewer.