@@ -272,7 +272,7 @@ JL_NO_ASAN static void restore_stack2(jl_task_t *t, jl_ptls_t ptls, jl_task_t *l
272272 return ;
273273 if (r != 0 || returns != 1 )
274274 abort ();
275- #elif defined(JL_HAVE_ASM ) || defined(JL_HAVE_SIGALTSTACK ) || defined( _OS_WINDOWS_ )
275+ #elif defined(JL_HAVE_ASM ) || defined(_OS_WINDOWS_ )
276276 if (jl_setjmp (lastt -> ctx .copy_ctx .uc_mcontext , 0 ))
277277 return ;
278278#else
@@ -1510,98 +1510,6 @@ JL_NO_ASAN static void jl_start_fiber_set(jl_ucontext_t *t)
15101510}
15111511#endif
15121512
1513- #if defined(JL_HAVE_SIGALTSTACK )
1514- #if defined(_COMPILER_TSAN_ENABLED_ )
1515- #error TSAN support not currently implemented for this tasking model
1516- #endif
1517-
1518- static void start_basefiber (int sig )
1519- {
1520- jl_ptls_t ptls = jl_current_task -> ptls ;
1521- if (jl_setjmp (ptls -> base_ctx .uc_mcontext , 0 ))
1522- start_task (); // sanitizer_finish_switch_fiber is part of start_task
1523- }
1524- static char * jl_alloc_fiber (_jl_ucontext_t * t , size_t * ssize , jl_task_t * owner )
1525- {
1526- stack_t uc_stack , osigstk ;
1527- struct sigaction sa , osa ;
1528- sigset_t set , oset ;
1529- void * stk = jl_malloc_stack (ssize , owner );
1530- if (stk == NULL )
1531- return NULL ;
1532- // setup
1533- jl_ptls_t ptls = jl_current_task -> ptls ;
1534- _jl_ucontext_t base_ctx ;
1535- memcpy (& base_ctx , & ptls -> base_ctx , sizeof (base_ctx ));
1536- sigfillset (& set );
1537- if (pthread_sigmask (SIG_BLOCK , & set , & oset ) != 0 ) {
1538- jl_free_stack (stk , * ssize );
1539- jl_error ("pthread_sigmask failed" );
1540- }
1541- uc_stack .ss_sp = stk ;
1542- uc_stack .ss_size = * ssize ;
1543- uc_stack .ss_flags = 0 ;
1544- if (sigaltstack (& uc_stack , & osigstk ) != 0 ) {
1545- jl_free_stack (stk , * ssize );
1546- jl_error ("sigaltstack failed" );
1547- }
1548- memset (& sa , 0 , sizeof (sa ));
1549- sigemptyset (& sa .sa_mask );
1550- sa .sa_handler = start_basefiber ;
1551- sa .sa_flags = SA_ONSTACK ;
1552- if (sigaction (SIGUSR2 , & sa , & osa ) != 0 ) {
1553- jl_free_stack (stk , * ssize );
1554- jl_error ("sigaction failed" );
1555- }
1556- // emit signal
1557- pthread_kill (pthread_self (), SIGUSR2 ); // initializes jl_basectx
1558- sigdelset (& set , SIGUSR2 );
1559- sigsuspend (& set );
1560- // cleanup
1561- if (sigaction (SIGUSR2 , & osa , NULL ) != 0 ) {
1562- jl_free_stack (stk , * ssize );
1563- jl_error ("sigaction failed" );
1564- }
1565- if (osigstk .ss_size < MINSTKSZ && (osigstk .ss_flags | SS_DISABLE ))
1566- osigstk .ss_size = MINSTKSZ ;
1567- if (sigaltstack (& osigstk , NULL ) != 0 ) {
1568- jl_free_stack (stk , * ssize );
1569- jl_error ("sigaltstack failed" );
1570- }
1571- if (pthread_sigmask (SIG_SETMASK , & oset , NULL ) != 0 ) {
1572- jl_free_stack (stk , * ssize );
1573- jl_error ("pthread_sigmask failed" );
1574- }
1575- if (& ptls -> base_ctx != t ) {
1576- memcpy (& t , & ptls -> base_ctx , sizeof (base_ctx ));
1577- memcpy (& ptls -> base_ctx , & base_ctx , sizeof (base_ctx )); // restore COPY_STACKS context
1578- }
1579- return (char * )stk ;
1580- }
1581- static void jl_start_fiber_set (jl_ucontext_t * t ) {
1582- jl_longjmp (t -> ctx .uc_mcontext , 1 ); // (doesn't return)
1583- }
1584- static void jl_start_fiber_swap (jl_ucontext_t * lastt , jl_ucontext_t * t )
1585- {
1586- assert (lastt );
1587- if (lastt && jl_setjmp (lastt -> ctx .uc_mcontext , 0 ))
1588- return ;
1589- tsan_switch_to_ctx (t );
1590- jl_start_fiber_set (t );
1591- }
1592- static void jl_swap_fiber (jl_ucontext_t * lastt , jl_ucontext_t * t )
1593- {
1594- if (jl_setjmp (lastt -> ctx .uc_mcontext , 0 ))
1595- return ;
1596- tsan_switch_to_ctx (t );
1597- jl_start_fiber_set (t ); // doesn't return
1598- }
1599- static void jl_set_fiber (jl_ucontext_t * t )
1600- {
1601- jl_longjmp (t -> ctx .uc_mcontext , 1 );
1602- }
1603- #endif
1604-
16051513// Initialize a root task using the given stack.
16061514jl_task_t * jl_init_root_task (jl_ptls_t ptls , void * stack_lo , void * stack_hi )
16071515{
0 commit comments