#! /usr/bin/perl -w

use strict;

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

    # "lib[S|s]ystem*" occurs on Darwin.
    s/\(in \/.*(libc|libSystem).*\)$/(in \/...libc...)/;
    s/\(within \/.*(libc|libSystem).*\)$/(within \/...libc...)/;
    s/\(in \/.*(libc|libsystem).*\)$/(in \/...libc...)/;
    s/\(within \/.*(libc|libsystem).*\)$/(within \/...libc...)/;

    # Filter out dynamic loader
    s/ \(in \/.*ld-.*so\)$//;

    # 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)/;

    # filter out the exact libc-start.c:### line number. (ppc64*)
    s/\(libc-start.c:[0-9]*\)$/(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[].../;

    print;
}

exit 0;
