#! /usr/bin/env perl

# Remove certain <frame>.....</frame> records that are suspected to point
# to some kind of system library. Those are
# - frames with <obj>/lib/....
# - frames with <obj>/usr/lib/....
# - frames without source informatino and without a function name
#
# There may be others...

use strict;
use warnings;

my $in_frame = 0;
my $frame = "";

# Info about the current frame
my $has_source_info   = 0;    # <dir>, <file>, <line>
my $has_function_name = 0;    # <fn>
my $has_system_obj    = 0;    # <obj>/lib...   or  <obj>/usr/lib...

while (my $line = <>)
{
    if (! $in_frame) {
        if ($line =~ /<frame>/) {
            $frame = $line;
            $in_frame = 1;
            $has_source_info = $has_function_name = $has_system_obj = 0;
        } else {
            print $line;
        }
        next;
    }

# We're in a frame
    $frame .= $line;
    if ($line =~ /<\/frame>/) {
# Is this a frame we want to keep?
        my $ignore_frame = $has_system_obj ||
            (! $has_source_info && ! $has_function_name);
        if (! $ignore_frame) {
            print $frame;
        }
        $in_frame = 0;
    } else {
        $has_source_info   = 1 if ($line =~ /<(dir|file|line)>/);
        $has_function_name = 1 if ($line =~ /<fn>/);
# This may require tweaking; currently  /lib and /usr/lib are matched
        $has_system_obj = 1 if ($line =~ /<obj>\/lib/);
        $has_system_obj = 1 if ($line =~ /<obj>\/usr\/lib/);
    }
}

exit 0;
