- Timestamp:
- Jan 15, 2021, 3:01:31 PM (5 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 77ff383
- Parents:
- 2d63023 (diff), b7664a03 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- libcfa/src
- Files:
-
- 5 edited
-
concurrency/io/setup.cfa (modified) (1 diff)
-
concurrency/kernel.cfa (modified) (1 diff)
-
concurrency/stats.hfa (modified) (2 diffs)
-
interpose.cfa (modified) (1 diff)
-
parseargs.cfa (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/io/setup.cfa
r2d63023 rd46bdac 42 42 void ^?{}(io_context & this, bool cluster_context) {} 43 43 44 void register_fixed_files( io_context &, int *, unsigned ) {} 45 void register_fixed_files( cluster &, int *, unsigned ) {} 46 44 47 #else 45 48 #include <errno.h> -
libcfa/src/concurrency/kernel.cfa
r2d63023 rd46bdac 624 624 // Unexpected Terminating logic 625 625 //============================================================================================= 626 static __spinlock_t kernel_abort_lock; 627 static bool kernel_abort_called = false; 626 627 extern "C" { 628 extern void __cfaabi_real_abort(void); 629 } 630 static volatile bool kernel_abort_called = false; 628 631 629 632 void * kernel_abort(void) __attribute__ ((__nothrow__)) { 630 633 // abort cannot be recursively entered by the same or different processors because all signal handlers return when 631 634 // the globalAbort flag is true. 632 lock( kernel_abort_lock __cfaabi_dbg_ctx2 ); 635 bool first = __atomic_test_and_set( &kernel_abort_called, __ATOMIC_SEQ_CST); 636 637 // first task to abort ? 638 if ( !first ) { 639 // We aren't the first to abort. 640 // I give up, just let C handle it 641 __cfaabi_real_abort(); 642 } 633 643 634 644 // disable interrupts, it no longer makes sense to try to interrupt this processor 635 645 disable_interrupts(); 636 637 // first task to abort ?638 if ( kernel_abort_called ) { // not first task to abort ?639 unlock( kernel_abort_lock );640 641 sigset_t mask;642 sigemptyset( &mask );643 sigaddset( &mask, SIGALRM ); // block SIGALRM signals644 sigaddset( &mask, SIGUSR1 ); // block SIGALRM signals645 sigsuspend( &mask ); // block the processor to prevent further damage during abort646 _exit( EXIT_FAILURE ); // if processor unblocks before it is killed, terminate it647 }648 else {649 kernel_abort_called = true;650 unlock( kernel_abort_lock );651 }652 646 653 647 return __cfaabi_tls.this_thread; -
libcfa/src/concurrency/stats.hfa
r2d63023 rd46bdac 2 2 3 3 #include <stdint.h> 4 5 enum { 6 CFA_STATS_READY_Q = 0x01, 7 CFA_STATS_IO = 0x02, 8 }; 4 9 5 10 #if defined(__CFA_NO_STATISTICS__) … … 9 14 static inline void __print_stats( struct __stats_t *, int, const char *, const char *, void * ) {} 10 15 #else 11 enum {12 CFA_STATS_READY_Q = 0x01,13 #if defined(CFA_HAVE_LINUX_IO_URING_H)14 CFA_STATS_IO = 0x02,15 #endif16 };17 16 18 17 struct __attribute__((aligned(64))) __stats_readQ_t { -
libcfa/src/interpose.cfa
r2d63023 rd46bdac 284 284 } 285 285 286 extern "C" { 287 void __cfaabi_real_abort(void) { 288 __cabi_libc.abort(); 289 } 290 } 291 286 292 void sigHandler_segv( __CFA_SIGPARMS__ ) { 287 293 if ( sfp->si_addr == 0p ) { -
libcfa/src/parseargs.cfa
r2d63023 rd46bdac 39 39 if( options[i].short_name != '\0' 40 40 && options[i].short_name == options[j].short_name) 41 abort("Parse Args error: two options have short name '%c' (% d & %d)", options[i].short_name, i, j);42 43 if(0 == strcmp(options[i].long_name, options[j].long_name)) abort("Parse Args error: two options have long name '%s' (% d & %d)", options[i].long_name, i, j);41 abort("Parse Args error: two options have short name '%c' (%zu & %zu)", options[i].short_name, i, j); 42 43 if(0 == strcmp(options[i].long_name, options[j].long_name)) abort("Parse Args error: two options have long name '%s' (%zu & %zu)", options[i].long_name, i, j); 44 44 } 45 45 }
Note:
See TracChangeset
for help on using the changeset viewer.