Changeset 2f19e03 for libcfa/src
- Timestamp:
- Jun 15, 2021, 12:28:48 PM (5 years ago)
- Branches:
- ADT, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- b51e389c
- Parents:
- 4aba055 (diff), 4f1b8f3f (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:
-
- 2 added
- 6 edited
-
Makefile.am (modified) (3 diffs)
-
concurrency/kernel.cfa (modified) (2 diffs)
-
concurrency/locks.hfa (modified) (3 diffs)
-
device/cpu.cfa (added)
-
device/cpu.hfa (added)
-
exception.c (modified) (8 diffs)
-
interpose.cfa (modified) (1 diff)
-
startup.cfa (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/Makefile.am
r4aba055 r2f19e03 69 69 common.hfa \ 70 70 fstream.hfa \ 71 strstream.hfa \72 71 heap.hfa \ 73 72 iostream.hfa \ … … 78 77 rational.hfa \ 79 78 stdlib.hfa \ 79 strstream.hfa \ 80 80 time.hfa \ 81 81 bits/weakso_locks.hfa \ … … 83 83 containers/pair.hfa \ 84 84 containers/result.hfa \ 85 containers/vector.hfa 85 containers/vector.hfa \ 86 device/cpu.hfa 86 87 87 88 libsrc = ${inst_headers_src} ${inst_headers_src:.hfa=.cfa} \ -
libcfa/src/concurrency/kernel.cfa
r4aba055 r2f19e03 422 422 __cfactx_switch( &proc_cor->context, &thrd_dst->context ); 423 423 // when __cfactx_switch returns we are back in the processor coroutine 424 425 424 426 425 427 /* paranoid */ verify( 0x0D15EA5E0D15EA5Ep == thrd_dst->canary ); … … 522 524 523 525 /* paranoid */ verify( ! __preemption_enabled() ); 524 /* paranoid */ verifyf( ((uintptr_t)thrd_src->context.SP) < ((uintptr_t)__get_stack(thrd_src->curr_cor)->base ) , "ERROR : Returning $thread %p has been corrupted.\n StackPointer too small.\n", thrd_src );525 /* paranoid */ verifyf( ((uintptr_t)thrd_src->context.SP) > ((uintptr_t)__get_stack(thrd_src->curr_cor)->limit) , "ERROR : Returning $thread %p has been corrupted.\n StackPointer too large.\n", thrd_src );526 /* paranoid */ verifyf( ((uintptr_t)thrd_src->context.SP) < ((uintptr_t)__get_stack(thrd_src->curr_cor)->base ) || thrd_src->corctx_flag, "ERROR : Returning $thread %p has been corrupted.\n StackPointer too small.\n", thrd_src ); 527 /* paranoid */ verifyf( ((uintptr_t)thrd_src->context.SP) > ((uintptr_t)__get_stack(thrd_src->curr_cor)->limit) || thrd_src->corctx_flag, "ERROR : Returning $thread %p has been corrupted.\n StackPointer too large.\n", thrd_src ); 526 528 } 527 529 -
libcfa/src/concurrency/locks.hfa
r4aba055 r2f19e03 21 21 #include "bits/weakso_locks.hfa" 22 22 #include "containers/queueLockFree.hfa" 23 23 #include "limits.hfa" 24 24 #include "thread.hfa" 25 25 … … 85 85 bool tryP(BinaryBenaphore & this) { 86 86 ssize_t c = this.counter; 87 /* paranoid */ verify( c > MIN ); 87 88 return (c >= 1) && __atomic_compare_exchange_n(&this.counter, &c, c-1, false, __ATOMIC_SEQ_CST, __ATOMIC_RELAXED); 88 89 } … … 92 93 ssize_t c = 0; 93 94 for () { 95 /* paranoid */ verify( this.counter < MAX ); 94 96 if (__atomic_compare_exchange_n(&this.counter, &c, c+1, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) { 95 97 if (c == 0) return true; -
libcfa/src/exception.c
r4aba055 r2f19e03 27 27 #include "stdhdr/assert.h" 28 28 #include "virtual.h" 29 30 #if defined( __ARM_ARCH )31 #warning FIX ME: temporary hack to keep ARM build working32 #ifndef _URC_FATAL_PHASE1_ERROR33 #define _URC_FATAL_PHASE1_ERROR 334 #endif // ! _URC_FATAL_PHASE1_ERROR35 #ifndef _URC_FATAL_PHASE2_ERROR36 #define _URC_FATAL_PHASE2_ERROR 237 #endif // ! _URC_FATAL_PHASE2_ERROR38 #endif // __ARM_ARCH39 40 29 #include "lsda.h" 41 30 … … 301 290 } 302 291 303 #if defined( __x86_64 ) || defined( __i386 ) 292 #if defined( __x86_64 ) || defined( __i386 ) || defined( __ARM_ARCH ) 304 293 // This is our personality routine. For every stack frame annotated with 305 294 // ".cfi_personality 0x3,__gcfa_personality_v0" this function will be called twice when unwinding. … … 419 408 _Unwind_GetCFA(unwind_context) + 24; 420 409 # elif defined( __ARM_ARCH ) 421 # warning FIX ME: check if anything needed for ARM 422 42; 410 _Unwind_GetCFA(unwind_context) + 40; 423 411 # endif 424 412 int (*matcher)(exception_t *) = *(int(**)(exception_t *))match_pos; … … 537 525 // HEADER 538 526 ".LFECFA1:\n" 527 #if defined( __x86_64 ) || defined( __i386 ) 539 528 " .globl __gcfa_personality_v0\n" 529 #else // defined( __ARM_ARCH ) 530 " .global __gcfa_personality_v0\n" 531 #endif 540 532 " .section .gcc_except_table,\"a\",@progbits\n" 541 533 // TABLE HEADER (important field is the BODY length at the end) … … 569 561 // No clue what this does specifically 570 562 " .section .data.rel.local.CFA.ref.__gcfa_personality_v0,\"awG\",@progbits,CFA.ref.__gcfa_personality_v0,comdat\n" 563 #if defined( __x86_64 ) || defined( __i386 ) 571 564 " .align 8\n" 565 #else // defined( __ARM_ARCH ) 566 " .align 3\n" 567 #endif 572 568 " .type CFA.ref.__gcfa_personality_v0, @object\n" 573 569 " .size CFA.ref.__gcfa_personality_v0, 8\n" … … 575 571 #if defined( __x86_64 ) 576 572 " .quad __gcfa_personality_v0\n" 577 #el se // then __i386573 #elif defined( __i386 ) 578 574 " .long __gcfa_personality_v0\n" 575 #else // defined( __ARM_ARCH ) 576 " .xword __gcfa_personality_v0\n" 579 577 #endif 580 578 ); … … 583 581 // HEADER 584 582 ".LFECFA1:\n" 583 #if defined( __x86_64 ) || defined( __i386 ) 585 584 " .globl __gcfa_personality_v0\n" 585 #else // defined( __ARM_ARCH ) 586 " .global __gcfa_personality_v0\n" 587 #endif 586 588 " .section .gcc_except_table,\"a\",@progbits\n" 587 589 // TABLE HEADER (important field is the BODY length at the end) … … 612 614 #pragma GCC pop_options 613 615 614 #elif defined( __ARM_ARCH )615 _Unwind_Reason_Code __gcfa_personality_v0(616 int version,617 _Unwind_Action actions,618 unsigned long long exception_class,619 struct _Unwind_Exception * unwind_exception,620 struct _Unwind_Context * unwind_context) {621 return _URC_CONTINUE_UNWIND;622 }623 624 __attribute__((noinline))625 void __cfaehm_try_terminate(void (*try_block)(),626 void (*catch_block)(int index, exception_t * except),627 __attribute__((unused)) int (*match_block)(exception_t * except)) {628 }629 616 #else 630 617 #error unsupported hardware architecture 631 #endif // __x86_64 || __i386 618 #endif // __x86_64 || __i386 || __ARM_ARCH -
libcfa/src/interpose.cfa
r4aba055 r2f19e03 95 95 96 96 extern "C" { 97 void __cfaabi_interpose_startup(void) __attribute__(( constructor( STARTUP_PRIORITY_CORE ) ));98 97 void __cfaabi_interpose_startup( void ) { 99 98 const char *version = 0p; -
libcfa/src/startup.cfa
r4aba055 r2f19e03 20 20 21 21 extern "C" { 22 void __cfaabi_appready_startup( void ) __attribute__(( constructor( STARTUP_PRIORITY_APPREADY ) ));23 void __cfaabi_appready_startup( void ) {22 void __cfaabi_appready_startup( void ) __attribute__(( constructor( STARTUP_PRIORITY_APPREADY ) )); 23 void __cfaabi_appready_startup( void ) { 24 24 tzset(); // initialize time global variables 25 25 setlocale( LC_NUMERIC, getenv("LANG") ); … … 28 28 heapAppStart(); 29 29 #endif // __CFA_DEBUG__ 30 } // __cfaabi_appready_startup30 } // __cfaabi_appready_startup 31 31 32 void __cfaabi_appready_shutdown( void ) __attribute__(( destructor( STARTUP_PRIORITY_APPREADY ) ));33 void __cfaabi_appready_shutdown( void ) {32 void __cfaabi_appready_shutdown( void ) __attribute__(( destructor( STARTUP_PRIORITY_APPREADY ) )); 33 void __cfaabi_appready_shutdown( void ) { 34 34 #ifdef __CFA_DEBUG__ 35 35 extern void heapAppStop(); 36 36 heapAppStop(); 37 37 #endif // __CFA_DEBUG__ 38 } // __cfaabi_appready_shutdown38 } // __cfaabi_appready_shutdown 39 39 40 void disable_interrupts() __attribute__(( weak )) {} 41 void enable_interrupts() __attribute__(( weak )) {} 40 void disable_interrupts() __attribute__(( weak )) {} 41 void enable_interrupts() __attribute__(( weak )) {} 42 43 44 extern void __cfaabi_interpose_startup( void ); 45 extern void __cfaabi_device_startup ( void ); 46 extern void __cfaabi_device_shutdown ( void ); 47 48 void __cfaabi_core_startup( void ) __attribute__(( constructor( STARTUP_PRIORITY_CORE ) )); 49 void __cfaabi_core_startup( void ) { 50 __cfaabi_interpose_startup(); 51 __cfaabi_device_startup(); 52 } // __cfaabi_core_startup 53 54 void __cfaabi_core_shutdown( void ) __attribute__(( destructor( STARTUP_PRIORITY_CORE ) )); 55 void __cfaabi_core_shutdown( void ) { 56 __cfaabi_device_shutdown(); 57 } // __cfaabi_core_shutdown 42 58 } // extern "C" 43 59
Note:
See TracChangeset
for help on using the changeset viewer.