Changes in / [1f951abd:997324c]


Ignore:
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/interpose.cfa

    r1f951abd r997324c  
    1010// Created On       : Wed Mar 29 16:10:31 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Mar  2 13:56:26 2023
    13 // Update Count     : 191
     12// Last Modified On : Fri Feb 24 15:31:03 2023
     13// Update Count     : 185
    1414//
    1515
     
    5353
    5454static generic_fptr_t interpose_symbol( const char symbol[], const char version[] ) {
    55         void * library;
    56         #if defined( RTLD_NEXT )
    57         library = RTLD_NEXT;
    58         #else
    59         library = dlopen( "libc.so.6", RTLD_LAZY );
     55        static void * library;
     56        static void * pthread_library;
     57
    6058        if ( ! library ) {
     59                library = dlopen( "libc.so.6", RTLD_LAZY );
    6160                const char * error = dlerror();
    6261                if ( error ) {
     
    6463                } // if
    6564        } // if
    66         #endif
     65        if ( ! pthread_library ) {
     66                pthread_library = dlopen( "libpthread.so", RTLD_LAZY );
     67                const char * error = dlerror();
     68                if ( error ) {
     69                        abort( "interpose_symbol : failed to open libpthread, %s\n", error );
     70                } // if
     71        } // if
    6772
    6873        return do_interpose_symbol(library, symbol, version);
     
    103108
    104109                if(__cfathreadabi_interpose_startup) __cfathreadabi_interpose_startup( do_interpose_symbol );
    105 
    106                 // SKULLDUGGERY: In Ubuntu 22.04, someone augmented signal.h to allow SIGSTKSZ to be "sysconf(_SC_SIGSTKSZ)" in
    107                 // sigstksz.h, as well as 8192 in sigstack.h. HOWEVER, they forgot to provide a mechanism to tell signal.h to
    108                 // use sigstack.h rather than sigstksz.h. (I'm not happy.) By undefining _GNU_SOURCE before signal.h and
    109                 // redefining it afterwards, you can get 8192, but then nothing works correctly inside of signal.h without
    110                 // _GNU_SOURCE defined.  So what is needed is a way to get signal.h to use sigstack.h WITH _GNU_SOURCE defined.
    111                 // Basically something is wrong with features.h and its use in signal.h.
    112 
    113                 #undef SIGSTKSZ
    114                 #define SIGSTKSZ 8192
    115110
    116111                // As a precaution (and necessity), errors that result in termination are delivered on a separate stack because
  • libcfa/src/interpose_thread.cfa

    r1f951abd r997324c  
    3939        const char version[]
    4040) libcfa_public {
    41         void * library;
    42         #if defined( RTLD_NEXT )
    43         library = RTLD_NEXT;
    44         #else
    45         // missing RTLD_NEXT => must hard-code library name, assuming libstdc++
    46         library = dlopen( "libthread_db.so", RTLD_LAZY );
     41        static void * library;
    4742        if ( ! library ) {
     43                library = dlopen( "libpthread.so", RTLD_LAZY );
    4844                const char * error = dlerror();
    4945                if ( error ) {
     
    5147                }
    5248        } // if
    53         #endif // RTLD_NEXT
    5449
    5550        return do_interpose_symbol(library, symbol, version);
  • src/InitTweak/FixInitNew.cpp

    r1f951abd r997324c  
    522522        {
    523523                static UniqueName tempNamer("_tmp_cp");
     524                assert( env );
    524525                const CodeLocation loc = impCpCtorExpr->location;
    525526                // CP_CTOR_PRINT( std::cerr << "Type Substitution: " << *env << std::endl; )
     
    533534
    534535                // xxx - this originally mutates arg->result in place. is it correct?
    535                 assert( env );
    536536                result = env->applyFree( result.get() ).node;
    537537                auto mutResult = result.get_and_mutate();
Note: See TracChangeset for help on using the changeset viewer.