Ignore:
File:
1 edited

Legend:

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

    rdd92fe9 r72a3aff  
    117117}
    118118
    119 extern size_t __page_size;
     119size_t __page_size = 0;
    120120
    121121//-----------------------------------------------------------------------------
     
    161161        /* paranoid */ verify( ! __preemption_enabled() );
    162162        __cfadbg_print_safe(runtime_core, "Kernel : Starting\n");
     163
     164        __page_size = sysconf( _SC_PAGESIZE );
    163165
    164166        __cfa_dbg_global_clusters.list{ __get };
     
    679681        #if CFA_PROCESSOR_USE_MMAP
    680682                stacksize = ceiling( stacksize, __page_size ) + __page_size;
    681                 stack = mmap(0p, stacksize, __map_prot, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
     683                stack = mmap(0p, stacksize, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
    682684                if(stack == ((void*)-1)) {
    683685                        abort( "pthread stack creation : internal error, mmap failure, error(%d) %s.", errno, strerror( errno ) );
     
    725727                }
    726728        #else
     729                __cfaabi_dbg_debug_do(
     730                        // pthread has no mechanism to create the guard page in user supplied stack.
     731                        if ( mprotect( stack, __page_size, PROT_READ | PROT_WRITE ) == -1 ) {
     732                                abort( "mprotect : internal error, mprotect failure, error(%d) %s.", errno, strerror( errno ) );
     733                        } // if
     734                );
    727735                free( stack );
    728736        #endif
Note: See TracChangeset for help on using the changeset viewer.