blob: 41d1f1ef597523c6bbee98ed0a5fa96def4a8ecb [file] [log] [blame]
#!/usr/bin/perl
# Replace pthread_create with pthread_create@* which is expected on Linux
s/pthread_create \(hg_intercepts.c:/pthread_create@* \(hg_intercepts.c:/g;
# We need to remove stack frames containing redundant function
# names from libc, for example
# by 0x........: pthread_mutex_init (in /...libc...)
my $check = join "|", ('pthread_mutex_init', 'pthread_cond_wait', 'pthread_cond_timedwait');
s/^\s*by 0x........: (?:$check) \(in \/...libc...\)\s*//;
# We also need to replace Solaris threading and sychronization function
# names with POSIX ones for hg_intercepts.c stack frame:
# at 0x........: mutex_lock (hg_intercepts.c:1234)
# See also comments in hg_intercepts.c.
my %regex = (
'cond_broadcast' => 'pthread_cond_broadcast@*',
'cond_destroy' => 'pthread_cond_destroy@*',
'cond_signal' => 'pthread_cond_signal@*',
'cond_wait' => 'pthread_cond_wait@*',
'cond_timedwait' => 'pthread_cond_timedwait@*',
'mutex_destroy' => 'pthread_mutex_destroy',
'mutex_init' => 'pthread_mutex_init',
'mutex_lock' => 'pthread_mutex_lock',
'mutex_trylock' => 'pthread_mutex_trylock',
'mutex_unlock' => 'pthread_mutex_unlock',
'rwlock_init' => 'pthread_rwlock_init',
'rw_unlock' => 'pthread_rwlock_unlock'
);
my $check = join "|", keys %regex;
if (! /: pthread_/ && ! /WRK/) {
s/($check)(.*hg_intercepts.c)/$regex{$1}$2/g;
}