Home | History | Annotate | Download | only in tests
      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