/** Returns a list of parts of a single section that have been referenced. The offsets are relative to the start of the * section. */ ExtentMap SgAsmGenericSection::get_referenced_extents() const { ExtentMap retval; if (0==get_size()) return retval; Extent s(get_offset(), get_size()); const ExtentMap &file_extents = get_file()->get_referenced_extents(); for (ExtentMap::const_iterator i=file_extents.begin(); i!=file_extents.end(); i++) { Extent e = i->first; if (e.contained_in(s)) { retval.insert(Extent(e.first()-get_offset(), e.size())); } else if (e.left_of(s) || e.right_of(s)) { /*void*/ } else if (e.contains(s)) { retval.insert(Extent(0, get_size())); } else if (e.begins_before(s)) { retval.insert(Extent(0, e.first()+e.size()-get_offset())); } else if (e.ends_after(s)) { retval.insert(Extent(e.first()-get_offset(), get_offset()+get_size()-e.first())); } else { assert(!"invalid extent overlap category"); abort(); } } return retval; }