Ignore:
Timestamp:
Dec 5, 2019, 10:57:06 PM (2 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
arm-eh, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr
Children:
baf608a
Parents:
0030ada3
Message:

move stack for preemptive pthread from TLS to static variable

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/kernel.cfa

    r0030ada3 r09d4b22  
    1010// Created On       : Tue Jan 17 12:27:26 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Dec  3 21:46:54 2019
    13 // Update Count     : 49
     12// Last Modified On : Thu Dec  5 16:25:52 2019
     13// Update Count     : 52
    1414//
    1515
     
    135135        NULL,                                                                                           // cannot use 0p
    136136        NULL,
    137         { NULL, 1, false, false },
     137        { 1, false, false },
    138138        6u //this should be seeded better but due to a bug calling rdtsc doesn't work
    139139};
     
    453453
    454454        size_t stacksize;
    455          // default stack size, normally defined by shell limit
     455        // default stack size, normally defined by shell limit
    456456        Abort( pthread_attr_getstacksize( &attr, &stacksize ), "pthread_attr_getstacksize" );
    457457        assert( stacksize >= PTHREAD_STACK_MIN );
    458458
    459 #ifdef __CFA_DEBUG__
    460         void * stack = memalign( __page_size, stacksize + __page_size );
    461         // pthread has no mechanism to create the guard page in user supplied stack.
    462         if ( mprotect( stack, __page_size, PROT_NONE ) == -1 ) {
    463                 abort( "mprotect : internal error, mprotect failure, error(%d) %s.", errno, strerror( errno ) );
    464         } // if
    465 #else
    466         void * stack = malloc( stacksize );
    467 #endif
     459        void * stack;
     460        __cfaabi_dbg_debug_do(
     461                stack = memalign( __page_size, stacksize + __page_size );
     462                // pthread has no mechanism to create the guard page in user supplied stack.
     463                if ( mprotect( stack, __page_size, PROT_NONE ) == -1 ) {
     464                        abort( "mprotect : internal error, mprotect failure, error(%d) %s.", errno, strerror( errno ) );
     465                } // if
     466        );
     467        __cfaabi_dbg_no_debug_do(
     468                stack = malloc( stacksize );
     469        );
    468470
    469471        Abort( pthread_attr_setstack( &attr, stack, stacksize ), "pthread_attr_setstack" );
Note: See TracChangeset for help on using the changeset viewer.