- Timestamp:
- Mar 2, 2023, 2:09:47 PM (2 years ago)
- Branches:
- ADT, ast-experimental, master
- Children:
- 1f951abd
- Parents:
- 8603c10
- Location:
- libcfa/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified libcfa/src/interpose.cfa ¶
r8603c10 r8bb46d2 10 10 // Created On : Wed Mar 29 16:10:31 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Feb 24 15:31:03202313 // Update Count : 1 8512 // Last Modified On : Thu Mar 2 13:56:26 2023 13 // Update Count : 191 14 14 // 15 15 … … 53 53 54 54 static 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 ); 58 60 if ( ! library ) { 59 library = dlopen( "libc.so.6", RTLD_LAZY );60 61 const char * error = dlerror(); 61 62 if ( error ) { … … 63 64 } // if 64 65 } // 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 72 67 73 68 return do_interpose_symbol(library, symbol, version); … … 108 103 109 104 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 110 115 111 116 // As a precaution (and necessity), errors that result in termination are delivered on a separate stack because -
TabularUnified libcfa/src/interpose_thread.cfa ¶
r8603c10 r8bb46d2 39 39 const char version[] 40 40 ) 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 ); 42 47 if ( ! library ) { 43 library = dlopen( "libpthread.so", RTLD_LAZY );44 48 const char * error = dlerror(); 45 49 if ( error ) { … … 47 51 } 48 52 } // if 53 #endif // RTLD_NEXT 49 54 50 55 return do_interpose_symbol(library, symbol, version);
Note: See TracChangeset
for help on using the changeset viewer.