Changeset 8bb46d2


Ignore:
Timestamp:
Mar 2, 2023, 2:09:47 PM (14 months ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, ast-experimental, master
Children:
1f951abd
Parents:
8603c10
Message:

fix errors on interpose code for libc and libpthread

Location:
libcfa/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/interpose.cfa

    r8603c10 r8bb46d2  
    1010// Created On       : Wed Mar 29 16:10:31 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Feb 24 15:31:03 2023
    13 // Update Count     : 185
     12// Last Modified On : Thu Mar  2 13:56:26 2023
     13// Update Count     : 191
    1414//
    1515
     
    5353
    5454static generic_fptr_t interpose_symbol( const char symbol[], const char version[] ) {
    55         static void * library;
    56         static void * pthread_library;
    57 
     55        void * library;
     56        #if defined( RTLD_NEXT )
     57        library = RTLD_NEXT;
     58        #else
     59        library = dlopen( "libc.so.6", RTLD_LAZY );
    5860        if ( ! library ) {
    59                 library = dlopen( "libc.so.6", RTLD_LAZY );
    6061                const char * error = dlerror();
    6162                if ( error ) {
     
    6364                } // if
    6465        } // if
    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
     66        #endif
    7267
    7368        return do_interpose_symbol(library, symbol, version);
     
    108103
    109104                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
    110115
    111116                // As a precaution (and necessity), errors that result in termination are delivered on a separate stack because
  • libcfa/src/interpose_thread.cfa

    r8603c10 r8bb46d2  
    3939        const char version[]
    4040) libcfa_public {
    41         static void * library;
     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 );
    4247        if ( ! library ) {
    43                 library = dlopen( "libpthread.so", RTLD_LAZY );
    4448                const char * error = dlerror();
    4549                if ( error ) {
     
    4751                }
    4852        } // if
     53        #endif // RTLD_NEXT
    4954
    5055        return do_interpose_symbol(library, symbol, version);
Note: See TracChangeset for help on using the changeset viewer.