Changeset 97229d6 for libcfa/src/concurrency/kernel/startup.cfa
- Timestamp:
- Dec 14, 2020, 2:31:50 PM (4 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 5dc5da7, 90ecade, ccb8c8a
- Parents:
- 867fca3
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/kernel/startup.cfa
r867fca3 r97229d6 30 30 #include "startup.hfa" // STARTUP_PRIORITY_XXX 31 31 #include "math.hfa" 32 33 #define CFA_PROCESSOR_USE_MMAP 0 32 34 33 35 //----------------------------------------------------------------------------- … … 677 679 678 680 void * stack; 679 #warning due to the thunk problem, stack creation uses mmap, revert to malloc once this goes away 680 // __cfaabi_dbg_debug_do( 681 // stack = memalign( __page_size, stacksize + __page_size ); 682 // // pthread has no mechanism to create the guard page in user supplied stack. 683 // if ( mprotect( stack, __page_size, PROT_NONE ) == -1 ) { 684 // abort( "mprotect : internal error, mprotect failure, error(%d) %s.", errno, strerror( errno ) ); 685 // } // if 686 // ); 687 // __cfaabi_dbg_no_debug_do( 688 // stack = malloc( stacksize ); 689 // ); 690 stacksize = ceiling( stacksize, __page_size ) + __page_size; 691 stack = mmap(0p, stacksize, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); 692 if(stack == ((void*)-1)) { 693 abort( "pthread stack creation : internal error, mmap failure, error(%d) %s.", errno, strerror( errno ) ); 694 } 695 if ( mprotect( stack, __page_size, PROT_NONE ) == -1 ) { 696 abort( "pthread stack creation : internal error, mprotect failure, error(%d) %s.", errno, strerror( errno ) ); 697 } // if 681 #if CFA_PROCESSOR_USE_MMAP 682 stacksize = ceiling( stacksize, __page_size ) + __page_size; 683 stack = mmap(0p, stacksize, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); 684 if(stack == ((void*)-1)) { 685 abort( "pthread stack creation : internal error, mmap failure, error(%d) %s.", errno, strerror( errno ) ); 686 } 687 if ( mprotect( stack, __page_size, PROT_NONE ) == -1 ) { 688 abort( "pthread stack creation : internal error, mprotect failure, error(%d) %s.", errno, strerror( errno ) ); 689 } // if 690 #else 691 __cfaabi_dbg_debug_do( 692 stack = memalign( __page_size, stacksize + __page_size ); 693 // pthread has no mechanism to create the guard page in user supplied stack. 694 if ( mprotect( stack, __page_size, PROT_NONE ) == -1 ) { 695 abort( "mprotect : internal error, mprotect failure, error(%d) %s.", errno, strerror( errno ) ); 696 } // if 697 ); 698 __cfaabi_dbg_no_debug_do( 699 stack = malloc( stacksize ); 700 ); 701 #endif 702 698 703 699 704 check( pthread_attr_setstack( &attr, stack, stacksize ), "pthread_attr_setstack" ); … … 707 712 if( err != 0 ) abort("KERNEL ERROR: joining pthread %p caused error %s\n", (void*)pthread, strerror(err)); 708 713 709 pthread_attr_t attr; 710 711 check( pthread_attr_init( &attr ), "pthread_attr_init" ); // initialize attribute 712 713 size_t stacksize; 714 // default stack size, normally defined by shell limit 715 check( pthread_attr_getstacksize( &attr, &stacksize ), "pthread_attr_getstacksize" ); 716 assert( stacksize >= PTHREAD_STACK_MIN ); 717 stacksize += __page_size; 718 719 if(munmap(stack, stacksize) == -1) { 720 abort( "pthread stack destruction : internal error, munmap failure, error(%d) %s.", errno, strerror( errno ) ); 721 } 714 #if CFA_PROCESSOR_USE_MMAP 715 pthread_attr_t attr; 716 717 check( pthread_attr_init( &attr ), "pthread_attr_init" ); // initialize attribute 718 719 size_t stacksize; 720 // default stack size, normally defined by shell limit 721 check( pthread_attr_getstacksize( &attr, &stacksize ), "pthread_attr_getstacksize" ); 722 assert( stacksize >= PTHREAD_STACK_MIN ); 723 stacksize += __page_size; 724 725 if(munmap(stack, stacksize) == -1) { 726 abort( "pthread stack destruction : internal error, munmap failure, error(%d) %s.", errno, strerror( errno ) ); 727 } 728 #else 729 free( stack ); 730 #endif 722 731 } 723 732
Note: See TracChangeset
for help on using the changeset viewer.