@@ -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
@@ -1472,98 +1472,6 @@ JL_NO_ASAN static void jl_start_fiber_set(jl_ucontext_t *t)
14721472}
14731473#endif
14741474
1475- #if defined(JL_HAVE_SIGALTSTACK )
1476- #if defined(_COMPILER_TSAN_ENABLED_ )
1477- #error TSAN support not currently implemented for this tasking model
1478- #endif
1479-
1480- static void start_basefiber (int sig )
1481- {
1482- jl_ptls_t ptls = jl_current_task -> ptls ;
1483- if (jl_setjmp (ptls -> base_ctx .uc_mcontext , 0 ))
1484- start_task (); // sanitizer_finish_switch_fiber is part of start_task
1485- }
1486- static char * jl_alloc_fiber (_jl_ucontext_t * t , size_t * ssize , jl_task_t * owner )
1487- {
1488- stack_t uc_stack , osigstk ;
1489- struct sigaction sa , osa ;
1490- sigset_t set , oset ;
1491- void * stk = jl_malloc_stack (ssize , owner );
1492- if (stk == NULL )
1493- return NULL ;
1494- // setup
1495- jl_ptls_t ptls = jl_current_task -> ptls ;
1496- _jl_ucontext_t base_ctx ;
1497- memcpy (& base_ctx , & ptls -> base_ctx , sizeof (base_ctx ));
1498- sigfillset (& set );
1499- if (pthread_sigmask (SIG_BLOCK , & set , & oset ) != 0 ) {
1500- jl_free_stack (stk , * ssize );
1501- jl_error ("pthread_sigmask failed" );
1502- }
1503- uc_stack .ss_sp = stk ;
1504- uc_stack .ss_size = * ssize ;
1505- uc_stack .ss_flags = 0 ;
1506- if (sigaltstack (& uc_stack , & osigstk ) != 0 ) {
1507- jl_free_stack (stk , * ssize );
1508- jl_error ("sigaltstack failed" );
1509- }
1510- memset (& sa , 0 , sizeof (sa ));
1511- sigemptyset (& sa .sa_mask );
1512- sa .sa_handler = start_basefiber ;
1513- sa .sa_flags = SA_ONSTACK ;
1514- if (sigaction (SIGUSR2 , & sa , & osa ) != 0 ) {
1515- jl_free_stack (stk , * ssize );
1516- jl_error ("sigaction failed" );
1517- }
1518- // emit signal
1519- pthread_kill (pthread_self (), SIGUSR2 ); // initializes jl_basectx
1520- sigdelset (& set , SIGUSR2 );
1521- sigsuspend (& set );
1522- // cleanup
1523- if (sigaction (SIGUSR2 , & osa , NULL ) != 0 ) {
1524- jl_free_stack (stk , * ssize );
1525- jl_error ("sigaction failed" );
1526- }
1527- if (osigstk .ss_size < MINSTKSZ && (osigstk .ss_flags | SS_DISABLE ))
1528- osigstk .ss_size = MINSTKSZ ;
1529- if (sigaltstack (& osigstk , NULL ) != 0 ) {
1530- jl_free_stack (stk , * ssize );
1531- jl_error ("sigaltstack failed" );
1532- }
1533- if (pthread_sigmask (SIG_SETMASK , & oset , NULL ) != 0 ) {
1534- jl_free_stack (stk , * ssize );
1535- jl_error ("pthread_sigmask failed" );
1536- }
1537- if (& ptls -> base_ctx != t ) {
1538- memcpy (& t , & ptls -> base_ctx , sizeof (base_ctx ));
1539- memcpy (& ptls -> base_ctx , & base_ctx , sizeof (base_ctx )); // restore COPY_STACKS context
1540- }
1541- return (char * )stk ;
1542- }
1543- static void jl_start_fiber_set (jl_ucontext_t * t ) {
1544- jl_longjmp (t -> ctx .uc_mcontext , 1 ); // (doesn't return)
1545- }
1546- static void jl_start_fiber_swap (jl_ucontext_t * lastt , jl_ucontext_t * t )
1547- {
1548- assert (lastt );
1549- if (lastt && jl_setjmp (lastt -> ctx .uc_mcontext , 0 ))
1550- return ;
1551- tsan_switch_to_ctx (t );
1552- jl_start_fiber_set (t );
1553- }
1554- static void jl_swap_fiber (jl_ucontext_t * lastt , jl_ucontext_t * t )
1555- {
1556- if (jl_setjmp (lastt -> ctx .uc_mcontext , 0 ))
1557- return ;
1558- tsan_switch_to_ctx (t );
1559- jl_start_fiber_set (t ); // doesn't return
1560- }
1561- static void jl_set_fiber (jl_ucontext_t * t )
1562- {
1563- jl_longjmp (t -> ctx .uc_mcontext , 1 );
1564- }
1565- #endif
1566-
15671475// Initialize a root task using the given stack.
15681476jl_task_t * jl_init_root_task (jl_ptls_t ptls , void * stack_lo , void * stack_hi )
15691477{
0 commit comments