1 #!/usr/bin/perl 2 3 # Replace pthread_create with pthread_create@* which is expected on Linux 4 s/pthread_create \(hg_intercepts.c:/pthread_create@* \(hg_intercepts.c:/g; 5 6 # We need to remove stack frames containing redundant function 7 # names from libc, for example 8 # by 0x........: pthread_mutex_init (in /...libc...) 9 my $check = join "|", ('pthread_mutex_init', 'pthread_cond_wait', 'pthread_cond_timedwait'); 10 s/^\s*by 0x........: (?:$check) \(in \/...libc...\)\s*//; 11 12 # We also need to replace Solaris threading and sychronization function 13 # names with POSIX ones for hg_intercepts.c stack frame: 14 # at 0x........: mutex_lock (hg_intercepts.c:1234) 15 # See also comments in hg_intercepts.c. 16 my %regex = ( 17 'cond_broadcast' => 'pthread_cond_broadcast@*', 18 'cond_destroy' => 'pthread_cond_destroy@*', 19 'cond_signal' => 'pthread_cond_signal@*', 20 'cond_wait' => 'pthread_cond_wait@*', 21 'cond_timedwait' => 'pthread_cond_timedwait@*', 22 'mutex_destroy' => 'pthread_mutex_destroy', 23 'mutex_init' => 'pthread_mutex_init', 24 'mutex_lock' => 'pthread_mutex_lock', 25 'mutex_trylock' => 'pthread_mutex_trylock', 26 'mutex_unlock' => 'pthread_mutex_unlock', 27 'rwlock_init' => 'pthread_rwlock_init', 28 'rw_unlock' => 'pthread_rwlock_unlock' 29 ); 30 my $check = join "|", keys %regex; 31 if (! /: pthread_/ && ! /WRK/) { 32 s/($check)(.*hg_intercepts.c)/$regex{$1}$2/g; 33 } 34