Changeset a182ad5
- Timestamp:
- Feb 22, 2022, 12:23:14 PM (3 years ago)
- Branches:
- ADT, ast-experimental, enum, master, pthread-emulation, qualifiedEnum
- Children:
- f53afafb
- Parents:
- f69fac7
- Location:
- libcfa/src
- Files:
-
- 2 added
- 2 deleted
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/Makefile.am
rf69fac7 ra182ad5 72 72 common.hfa \ 73 73 fstream.hfa \ 74 heap.hfa \ 74 75 iostream.hfa \ 75 76 iterator.hfa \ … … 101 102 startup.hfa \ 102 103 virtual.c \ 103 virtual.h \ 104 heap.cc \ 105 heap.h 104 virtual.h 106 105 107 106 # not all platforms support concurrency, add option do disable it … … 173 172 174 173 -include $(libdeps) 175 -include $(DEPDIR)/heap.Plo176 174 177 175 thread_libdeps = $(join \ -
libcfa/src/concurrency/coroutine.cfa
rf69fac7 ra182ad5 85 85 // minimum feasible stack size in bytes 86 86 static const size_t MinStackSize = 1000; 87 88 extern "C" { 89 extern size_t __cfa_page_size; // architecture pagesize HACK, should go in proper runtime singleton 90 extern int __map_prot; 91 } 87 extern size_t __page_size; // architecture pagesize HACK, should go in proper runtime singleton 88 extern int __map_prot; 92 89 93 90 void __stack_prepare( __stack_info_t * this, size_t create_size ); … … 160 157 [void *, size_t] __stack_alloc( size_t storageSize ) { 161 158 const size_t stack_data_size = libCeiling( sizeof(__stack_t), 16 ); // minimum alignment 162 assert(__ cfa_page_size != 0l);159 assert(__page_size != 0l); 163 160 size_t size = libCeiling( storageSize, 16 ) + stack_data_size; 164 size = ceiling(size, __ cfa_page_size);161 size = ceiling(size, __page_size); 165 162 166 163 // If we are running debug, we also need to allocate a guardpage to catch stack overflows. 167 164 void * storage; 168 165 #if CFA_COROUTINE_USE_MMAP 169 storage = mmap(0p, size + __ cfa_page_size, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);166 storage = mmap(0p, size + __page_size, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); 170 167 if(storage == ((void*)-1)) { 171 168 abort( "coroutine stack creation : internal error, mmap failure, error(%d) %s.", errno, strerror( errno ) ); 172 169 } 173 if ( mprotect( storage, __ cfa_page_size, PROT_NONE ) == -1 ) {170 if ( mprotect( storage, __page_size, PROT_NONE ) == -1 ) { 174 171 abort( "coroutine stack creation : internal error, mprotect failure, error(%d) %s.", errno, strerror( errno ) ); 175 172 } // if 176 storage = (void *)(((intptr_t)storage) + __ cfa_page_size);173 storage = (void *)(((intptr_t)storage) + __page_size); 177 174 #else 178 175 __cfaabi_dbg_debug_do( 179 storage = memalign( __ cfa_page_size, size + __cfa_page_size );176 storage = memalign( __page_size, size + __page_size ); 180 177 ); 181 178 __cfaabi_dbg_no_debug_do( … … 184 181 185 182 __cfaabi_dbg_debug_do( 186 if ( mprotect( storage, __ cfa_page_size, PROT_NONE ) == -1 ) {183 if ( mprotect( storage, __page_size, PROT_NONE ) == -1 ) { 187 184 abort( "__stack_alloc : internal error, mprotect failure, error(%d) %s.", (int)errno, strerror( (int)errno ) ); 188 185 } 189 storage = (void *)(((intptr_t)storage) + __ cfa_page_size);186 storage = (void *)(((intptr_t)storage) + __page_size); 190 187 ); 191 188 #endif … … 201 198 #if CFA_COROUTINE_USE_MMAP 202 199 size_t size = ((intptr_t)this->storage->base) - ((intptr_t)this->storage->limit) + sizeof(__stack_t); 203 storage = (void *)(((intptr_t)storage) - __ cfa_page_size);204 if(munmap(storage, size + __ cfa_page_size) == -1) {200 storage = (void *)(((intptr_t)storage) - __page_size); 201 if(munmap(storage, size + __page_size) == -1) { 205 202 abort( "coroutine stack destruction : internal error, munmap failure, error(%d) %s.", errno, strerror( errno ) ); 206 203 } 207 204 #else 208 205 __cfaabi_dbg_debug_do( 209 storage = (char*)(storage) - __ cfa_page_size;210 if ( mprotect( storage, __ cfa_page_size, __map_prot ) == -1 ) {206 storage = (char*)(storage) - __page_size; 207 if ( mprotect( storage, __page_size, __map_prot ) == -1 ) { 211 208 abort( "(coStack_t *)%p.^?{}() : internal error, mprotect failure, error(%d) %s.", &this, errno, strerror( errno ) ); 212 209 } -
libcfa/src/concurrency/kernel/startup.cfa
rf69fac7 ra182ad5 122 122 extern "C" { 123 123 struct { __dllist_t(cluster) list; __spinlock_t lock; } __cfa_dbg_global_clusters; 124 extern size_t __cfa_page_size; 125 extern int __map_prot; 126 } 124 } 125 126 extern size_t __page_size; 127 extern int __map_prot; 127 128 128 129 //----------------------------------------------------------------------------- … … 573 574 } 574 575 576 extern size_t __page_size; 575 577 void ^?{}(processor & this) with( this ){ 576 578 /* paranoid */ verify( !__atomic_load_n(&do_terminate, __ATOMIC_ACQUIRE) ); … … 738 740 void * stack; 739 741 #if CFA_PROCESSOR_USE_MMAP 740 stacksize = ceiling( stacksize, __ cfa_page_size ) + __cfa_page_size;742 stacksize = ceiling( stacksize, __page_size ) + __page_size; 741 743 stack = mmap(0p, stacksize, __map_prot, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); 742 744 if(stack == ((void*)-1)) { 743 745 abort( "pthread stack creation : internal error, mmap failure, error(%d) %s.", errno, strerror( errno ) ); 744 746 } 745 if ( mprotect( stack, __ cfa_page_size, PROT_NONE ) == -1 ) {747 if ( mprotect( stack, __page_size, PROT_NONE ) == -1 ) { 746 748 abort( "pthread stack creation : internal error, mprotect failure, error(%d) %s.", errno, strerror( errno ) ); 747 749 } // if 748 750 #else 749 751 __cfaabi_dbg_debug_do( 750 stack = memalign( __ cfa_page_size, stacksize + __cfa_page_size );752 stack = memalign( __page_size, stacksize + __page_size ); 751 753 // pthread has no mechanism to create the guard page in user supplied stack. 752 if ( mprotect( stack, __ cfa_page_size, PROT_NONE ) == -1 ) {754 if ( mprotect( stack, __page_size, PROT_NONE ) == -1 ) { 753 755 abort( "mprotect : internal error, mprotect failure, error(%d) %s.", errno, strerror( errno ) ); 754 756 } // if … … 777 779 check( pthread_attr_getstacksize( &attr, &stacksize ), "pthread_attr_getstacksize" ); 778 780 assert( stacksize >= PTHREAD_STACK_MIN ); 779 stacksize += __ cfa_page_size;781 stacksize += __page_size; 780 782 781 783 if(munmap(stack, stacksize) == -1) { … … 785 787 __cfaabi_dbg_debug_do( 786 788 // pthread has no mechanism to create the guard page in user supplied stack. 787 if ( mprotect( stack, __ cfa_page_size, __map_prot ) == -1 ) {789 if ( mprotect( stack, __page_size, __map_prot ) == -1 ) { 788 790 abort( "mprotect : internal error, mprotect failure, error(%d) %s.", errno, strerror( errno ) ); 789 791 } // if -
libcfa/src/startup.cfa
rf69fac7 ra182ad5 27 27 void __cfaabi_appready_startup( void ) { 28 28 tzset(); // initialize time global variables 29 #ifdef __CFA_DEBUG__ FIXME29 #ifdef __CFA_DEBUG__ 30 30 extern void heapAppStart(); 31 31 heapAppStart(); 32 #endif // __CFA_DEBUG__ FIXME32 #endif // __CFA_DEBUG__ 33 33 } // __cfaabi_appready_startup 34 34 35 35 void __cfaabi_appready_shutdown( void ) __attribute__(( destructor( STARTUP_PRIORITY_APPREADY ) )); 36 36 void __cfaabi_appready_shutdown( void ) { 37 #ifdef __CFA_DEBUG__ FIXME37 #ifdef __CFA_DEBUG__ 38 38 extern void heapAppStop(); 39 39 heapAppStop(); 40 #endif // __CFA_DEBUG__ FIXME40 #endif // __CFA_DEBUG__ 41 41 } // __cfaabi_appready_shutdown 42 42 -
libcfa/src/stdhdr/malloc.h
rf69fac7 ra182ad5 18 18 } // extern "C" 19 19 20 #include <heap.h >20 #include <heap.hfa> 21 21 22 22 // Local Variables: // -
libcfa/src/stdlib.hfa
rf69fac7 ra182ad5 21 21 22 22 #include <stdlib.h> // *alloc, strto*, ato* 23 #include <heap.h >23 #include <heap.hfa> 24 24 25 25
Note: See TracChangeset
for help on using the changeset viewer.