#! /usr/bin/perl -w

use strict;

my @libc_symbols = qw(__libc_start_main accept execve fcntl
                      getsockname poll readv recvmsg
                      socket socketpair syscall writev);

my $libc_symbols = join("|", @libc_symbols);

while (<>)
{
    s/ __getsockname / getsockname /;
    s/ __sigaction / sigaction /;
    s/ __GI___/ __/;
    s/ __([a-z]*)_nocancel / $1 /;

    # "libSystem*" occurs on Darwin.
    s/\(in \/.*(libc|libSystem).*\)$/(in \/...libc...)/;
    s/\(within \/.*(libc|libSystem).*\)$/(within \/...libc...)/;

    # Remove the filename -- on some platforms (eg. Linux) it will be in
    # libc, on some (eg. Darwin) it will be in the main executable.
    s/\(below main\) \(.+\)$/(below main)/;

    s/($libc_symbols) \(.+\.[cS]:\d+\)$/$1 (in \/...libc...)/;

    # Merge the different C++ operator variations.
    s/(at.*)__builtin_new/$1...operator new.../;
    s/(at.*)operator new\(unsigned(| int| long)\)/$1...operator new.../;

    s/(at.*)__builtin_vec_new/$1...operator new.../;
    s/(at.*)operator new\[\]\(unsigned(| int| long)\)/$1...operator new[].../;

    s/(at.*)__builtin_delete/$1...operator delete.../;
    s/(at.*)operator delete\(void\*\)/$1...operator delete.../;

    s/(at.*)__builtin_vec_delete/$1...operator delete[].../;
    s/(at.*)operator delete\[\]\(void\*\)/$1...operator delete[].../;

    # Tidy up in cases where glibc (+ libdl + libpthread + ld) have
    # been built with debugging information, hence source locs are present.
    s/\((exit|_exit|brk|sbrk).c:[0-9]*\)/(in \/...libc...)/;

    print;
}

exit 0;
