Changeset 70ac8d0


Ignore:
Timestamp:
May 12, 2020, 4:55:42 PM (3 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, arm-eh, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
068a202, f2d05e9
Parents:
5c581cc (diff), 730f4f1 (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.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

Files:
17 edited

Legend:

Unmodified
Added
Removed
  • configure

    r5c581cc r70ac8d0  
    802802with_cfa_name
    803803enable_distcc
     804with_bwlimit
    804805with_target_hosts
    805806enable_gprofiler
     
    14811482  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
    14821483  --with-cfa-name=NAME     NAME too which cfa will be installed
     1484  --with-bwlimit=RATE     RATE the maximum rate at which rsync will be limited when using distributed builds
    14831485  --with-target-hosts=HOSTS     HOSTS comma seperated list of hosts to build for, format ARCH:debug|nodebug|nolib
    14841486  --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
     
    31983200else
    31993201  enable_distcc=no
     3202fi
     3203
     3204
     3205
     3206# Check whether --with-bwlimit was given.
     3207if test "${with_bwlimit+set}" = set; then :
     3208  withval=$with_bwlimit;
    32003209fi
    32013210
  • configure.ac

    r5c581cc r70ac8d0  
    6464        [  --enable-distcc     whether or not to enable distributed compilation],
    6565        enable_distcc=$enableval, enable_distcc=no)
     66
     67AC_ARG_WITH(bwlimit,
     68        [  --with-bwlimit=RATE     RATE the maximum rate at which rsync will be limited when using distributed builds],
     69        [], [])
    6670
    6771AM_CONDITIONAL([ENABLE_DISTCC], [test x$enable_distcc = xyes])
  • doc/proposals/vtable.md

    r5c581cc r70ac8d0  
    237237default is provided or not, the second syntax can be used to pick a
    238238parameter on instantiation.
     239
     240### Extension: Object Access
     241This requires that the resolution scope (see below) is at the type level or
     242has explicate points with names. These are the tables and table names used
     243here.
     244
     245The system already knows where to find the virtual table and the object. If
     246the tables have particular identities, or on the user side names, then it is
     247meaningful to check if a binding virtual table is the same* as another. The
     248main use of this is virtual table declarations also give the type they bind
     249and if a binding table matches a known table then the underlyind object in the
     250trait object must be of that type.
     251
     252* By identity, by value would work and in some senses be more flexiable. But
     253  it would be slower and refering to further away functions would be harder.
     254
     255This gives one of the main new features of the hierarchical use of virtual
     256tables (see below); the ability to recover the underlying object. Or a pointer
     257of the approprate type it which both reflects the implementation and gives a
     258convenent way to encode the boolean/conditional aspect of the operation which
     259is that a different virtual table might be in use.
     260
     261There are two general ways to reperent this; a cast or a field access. The
     262cast is traditional and would definitely fit if a single pointer repersents
     263a trait object with the virtual table as part of the object. However for a
     264double pointer field access might be more approprate. By this system though
     265it is not the type that is used as the identifier but the virtual table. If
     266there is one table per type than it becomes equivilant again. Otherwise the
     267table has to be used as the identifier and the type is just a result of that
     268which seems important for syntax.
    239269
    240270Hierarchy
     
    560590be used in only some of the declarations.
    561591
    562     trait combiner fee = (summation_instance, sum);
     592    trait combiner fee = {summation_instance, sum};
    563593    trait combiner foe = summation_instance;
    564594
  • libcfa/Makefile.in

    r5c581cc r70ac8d0  
    253253DEFS = @DEFS@
    254254DEPDIR = @DEPDIR@
     255DIST_BWLIMIT = @DIST_BWLIMIT@
    255256DLLTOOL = @DLLTOOL@
    256257DRIVER_DIR = @DRIVER_DIR@
  • libcfa/configure

    r5c581cc r70ac8d0  
    707707CONFIG_CFLAGS
    708708ARCH_FLAGS
     709DIST_BWLIMIT
    709710CFADIR_HASH
    710711LOCAL_CC1
     
    789790enable_silent_rules
    790791enable_distcc
     792with_bwlimit
    791793with_cfa_name
    792794enable_static
     
    14651467  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
    14661468  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
     1469  --with-bwlimit=RATE     RATE the maximum rate at which rsync will be limited when using distributed builds
    14671470  --with-cfa-name=NAME     NAME too which cfa will be installed
    14681471  --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
     
    30473050
    30483051
     3052
     3053# Check whether --with-bwlimit was given.
     3054if test "${with_bwlimit+set}" = set; then :
     3055  withval=$with_bwlimit; DIST_BWLIMIT=$withval
     3056else
     3057  DIST_BWLIMIT=0
     3058fi
     3059
     3060
    30493061echo -n "checking for distributated build... "
    30503062if test x$enable_distcc = xno; then
     
    30703082  ENABLE_DISTCC_FALSE=
    30713083fi
     3084
    30723085
    30733086
  • libcfa/configure.ac

    r5c581cc r70ac8d0  
    3131        enable_distcc=$enableval, enable_distcc=no)
    3232
     33AC_ARG_WITH(bwlimit,
     34        [  --with-bwlimit=RATE     RATE the maximum rate at which rsync will be limited when using distributed builds],
     35        DIST_BWLIMIT=$withval, DIST_BWLIMIT=0)
     36
    3337echo -n "checking for distributated build... "
    3438if test x$enable_distcc = xno; then
     
    5559AC_SUBST(CFADIR_HASH)
    5660AC_SUBST(CFA_VERSION)
     61AC_SUBST(DIST_BWLIMIT)
    5762
    5863#==============================================================================
  • libcfa/prelude/Makefile.am

    r5c581cc r70ac8d0  
    7272if ENABLE_DISTCC
    7373distribution: @LOCAL_CFACC@ @LOCAL_CC1@ @CFACPP@ gcc-builtins.cf builtins.cf extras.cf prelude.cfa bootloader.c $(srcdir)/../../tools/build/push2dist.sh
    74         ${AM_V_GEN}$(srcdir)/../../tools/build/push2dist.sh @CFADIR_HASH@
     74        ${AM_V_GEN}$(srcdir)/../../tools/build/push2dist.sh @CFADIR_HASH@ @DIST_BWLIMIT@
    7575        @echo "Dummy file to track distribution to remote hosts" > ${@}
    7676
  • libcfa/prelude/Makefile.in

    r5c581cc r70ac8d0  
    215215DEFS = @DEFS@
    216216DEPDIR = @DEPDIR@
     217DIST_BWLIMIT = @DIST_BWLIMIT@
    217218DLLTOOL = @DLLTOOL@
    218219DRIVER_DIR = @DRIVER_DIR@
     
    655656
    656657@ENABLE_DISTCC_TRUE@distribution: @LOCAL_CFACC@ @LOCAL_CC1@ @CFACPP@ gcc-builtins.cf builtins.cf extras.cf prelude.cfa bootloader.c $(srcdir)/../../tools/build/push2dist.sh
    657 @ENABLE_DISTCC_TRUE@    ${AM_V_GEN}$(srcdir)/../../tools/build/push2dist.sh @CFADIR_HASH@
     658@ENABLE_DISTCC_TRUE@    ${AM_V_GEN}$(srcdir)/../../tools/build/push2dist.sh @CFADIR_HASH@ @DIST_BWLIMIT@
    658659@ENABLE_DISTCC_TRUE@    @echo "Dummy file to track distribution to remote hosts" > ${@}
    659660
  • libcfa/src/Makefile.in

    r5c581cc r70ac8d0  
    307307DEFS = @DEFS@
    308308DEPDIR = @DEPDIR@
     309DIST_BWLIMIT = @DIST_BWLIMIT@
    309310DLLTOOL = @DLLTOOL@
    310311DRIVER_DIR = @DRIVER_DIR@
  • libcfa/src/concurrency/kernel.cfa

    r5c581cc r70ac8d0  
    374374
    375375                /* paranoid */ verify( ! kernelTLS.preemption_state.enabled );
     376                /* paranoid */ verify( kernelTLS.this_thread == thrd_dst );
    376377                /* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) < ((uintptr_t)__get_stack(thrd_dst->curr_cor)->base ) || thrd_dst->curr_cor == proc_cor, "ERROR : Destination $thread %p has been corrupted.\n StackPointer too small.\n", thrd_dst ); // add escape condition if we are setting up the processor
    377378                /* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) > ((uintptr_t)__get_stack(thrd_dst->curr_cor)->limit) || thrd_dst->curr_cor == proc_cor, "ERROR : Destination $thread %p has been corrupted.\n StackPointer too large.\n", thrd_dst ); // add escape condition if we are setting up the processor
     
    384385                /* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) > ((uintptr_t)__get_stack(thrd_dst->curr_cor)->limit), "ERROR : Destination $thread %p has been corrupted.\n StackPointer too large.\n", thrd_dst );
    385386                /* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) < ((uintptr_t)__get_stack(thrd_dst->curr_cor)->base ), "ERROR : Destination $thread %p has been corrupted.\n StackPointer too small.\n", thrd_dst );
     387                /* paranoid */ verify( kernelTLS.this_thread == thrd_dst );
    386388                /* paranoid */ verify( ! kernelTLS.preemption_state.enabled );
    387389
  • libcfa/src/exception.c

    r5c581cc r70ac8d0  
    121121
    122122
    123 // TERMINATION ===============================================================
    124 
    125 // MEMORY MANAGEMENT (still for integers)
    126 // May have to move to cfa for constructors and destructors (references).
     123// MEMORY MANAGEMENT =========================================================
    127124
    128125// How to clean up an exception in various situations.
     
    203200}
    204201
    205 // If this isn't a rethrow (*except==0), delete the provided exception.
    206 void __cfaehm_cleanup_terminate( void * except ) {
    207         if ( *(void**)except ) __cfaehm_delete_exception( *(exception_t **)except );
    208 }
     202// CANCELLATION ==============================================================
    209203
    210204// Function needed by force unwind
     
    228222}
    229223
     224// Cancel the current stack, prefroming approprate clean-up and messaging.
     225static __attribute__((noreturn)) void __cfaehm_cancel_stack(
     226                exception_t * exception ) {
     227        // TODO: Detect current stack and pick a particular stop-function.
     228        _Unwind_Reason_Code ret;
     229        ret = _Unwind_ForcedUnwind( &this_exception_storage, _Stop_Fn, (void*)0x22 );
     230        printf("UNWIND ERROR %d after force unwind\n", ret);
     231        abort();
     232}
     233
     234
     235// TERMINATION ===============================================================
     236
     237// If this isn't a rethrow (*except==0), delete the provided exception.
     238void __cfaehm_cleanup_terminate( void * except ) {
     239        if ( *(void**)except ) __cfaehm_delete_exception( *(exception_t **)except );
     240}
     241
    230242// The exception that is being thrown must already be stored.
    231243static __attribute__((noreturn)) void __cfaehm_begin_unwind(void) {
     
    245257        // the whole stack.
    246258
     259        // No handler found, go to the default operation.
     260        // Currently this will always be a cancellation.
    247261        if ( ret == _URC_END_OF_STACK ) {
    248                 // No proper handler was found. This can be handled in many ways, C++ calls std::terminate.
    249                 // Here we force unwind the stack, basically raising a cancellation.
    250                 printf("Uncaught exception %p\n", &this_exception_storage);
    251 
    252                 ret = _Unwind_ForcedUnwind( &this_exception_storage, _Stop_Fn, (void*)0x22 );
    253                 printf("UNWIND ERROR %d after force unwind\n", ret);
    254                 abort();
     262                __cfadbg_print_safe(exception, "Uncaught exception %p\n", &this_exception_storage);
     263
     264                __cfaehm_cancel_stack(this_exception_context()->current_exception);
    255265        }
    256266
  • tests/exceptions/.expect/resume.txt

    r5c581cc r70ac8d0  
    44end of try clause
    55Exiting: simple try clause
     6
     7catch-all
    68
    79throwing child exception
  • tests/exceptions/.expect/terminate.txt

    r5c581cc r70ac8d0  
    33simple catch
    44Exiting: simple catch clause
     5
     6catch-all
    57
    68throwing child exception
  • tests/exceptions/data-except.cfa

    r5c581cc r70ac8d0  
    1212        this.first = first;
    1313        this.second = second;
    14 }
    15 
    16 void copy(paired * this, paired * other) {
    17         *this = *other;
    1814}
    1915
  • tests/exceptions/resume.cfa

    r5c581cc r70ac8d0  
    1919                loud_exit a = "simple catch clause";
    2020                printf("simple catch\n");
     21        }
     22        printf("\n");
     23
     24        // Throw catch-all test.
     25        try {
     26                throwResume &(zen){};
     27        } catchResume (exception_t * error) {
     28                printf("catch-all\n");
    2129        }
    2230        printf("\n");
  • tests/exceptions/terminate.cfa

    r5c581cc r70ac8d0  
    1717                printf("end of try clause\n");
    1818        } catch (zen * error) {
    19         loud_exit a = "simple catch clause";
     19                loud_exit a = "simple catch clause";
    2020                printf("simple catch\n");
     21        }
     22        printf("\n");
     23
     24        // Throw catch-all test.
     25        try {
     26                throw &(zen){};
     27        } catch (exception_t * error) {
     28                printf("catch-all\n");
    2129        }
    2230        printf("\n");
  • tools/build/push2dist.sh

    r5c581cc r70ac8d0  
    22
    33hash="$1"
     4bwlim="$2"
    45valid=$(distcc -j 2> /dev/null)
    56# if test "${valid}" != 0
     
    2425function push() {
    2526        ssh ${host} "mkdir -p ~/.cfadistcc/${hash}/"
    26         rsync -a ${dV} ${files} ${host}:~/.cfadistcc/${hash}/.
     27        rsync --bwlimit=${bwlim} -a ${dV} ${files} ${host}:~/.cfadistcc/${hash}/.
    2728}
    2829
Note: See TracChangeset for help on using the changeset viewer.