32 lines
848 B
C++
32 lines
848 B
C++
#include "OverriddenRowFilter.hpp"
|
|
|
|
OverriddenRowFilter::OverriddenRowFilter(bool enable)
|
|
: SimpleDwarfFilter(enable)
|
|
{}
|
|
|
|
SimpleDwarf OverriddenRowFilter::do_apply(const SimpleDwarf& dw) const {
|
|
SimpleDwarf out;
|
|
|
|
for(const auto& fde: dw.fde_list) {
|
|
out.fde_list.push_back(SimpleDwarf::Fde());
|
|
SimpleDwarf::Fde& cur_fde = out.fde_list.back();
|
|
cur_fde.fde_offset = fde.fde_offset;
|
|
cur_fde.beg_ip = fde.beg_ip;
|
|
cur_fde.end_ip = fde.end_ip;
|
|
|
|
if(fde.rows.empty())
|
|
continue;
|
|
|
|
for(size_t pos=0; pos < fde.rows.size(); ++pos) {
|
|
const auto& row = fde.rows[pos];
|
|
if(pos == fde.rows.size() - 1
|
|
|| row.ip != fde.rows[pos+1].ip)
|
|
{
|
|
cur_fde.rows.push_back(row);
|
|
}
|
|
}
|
|
}
|
|
|
|
return out;
|
|
}
|