… | |
… | |
79 | volatile coro_func func = coro_init_func; |
79 | volatile coro_func func = coro_init_func; |
80 | volatile void *arg = coro_init_arg; |
80 | volatile void *arg = coro_init_arg; |
81 | |
81 | |
82 | coro_transfer ((coro_context *)new_coro, (coro_context *)create_coro); |
82 | coro_transfer ((coro_context *)new_coro, (coro_context *)create_coro); |
83 | |
83 | |
84 | #if HAVE_CFI |
|
|
85 | asm (".cfi_startproc"); |
|
|
86 | #endif |
|
|
87 | func ((void *)arg); |
84 | func ((void *)arg); |
88 | #if HAVE_CFI |
|
|
89 | asm (".cfi_endproc"); |
|
|
90 | #endif |
|
|
91 | |
85 | |
92 | /* the new coro returned. bad. just abort() for now */ |
86 | /* the new coro returned. bad. just abort() for now */ |
93 | abort (); |
87 | abort (); |
94 | } |
88 | } |
95 | |
89 | |
… | |
… | |
100 | /* trampoline signal handler */ |
94 | /* trampoline signal handler */ |
101 | static void |
95 | static void |
102 | trampoline (int sig) |
96 | trampoline (int sig) |
103 | { |
97 | { |
104 | if (setjmp (((coro_context *)new_coro)->env)) |
98 | if (setjmp (((coro_context *)new_coro)->env)) |
|
|
99 | { |
|
|
100 | #if HAVE_CFI |
|
|
101 | asm (".cfi_startproc"); |
|
|
102 | #endif |
105 | coro_init (); /* start it */ |
103 | coro_init (); /* start it */ |
|
|
104 | #if HAVE_CFI |
|
|
105 | asm (".cfi_endproc"); |
|
|
106 | #endif |
|
|
107 | } |
106 | else |
108 | else |
107 | trampoline_count++; |
109 | trampoline_count++; |
108 | } |
110 | } |
109 | |
111 | |
110 | # endif |
112 | # endif |