private AddressSet findUnmatchedP2Addrs(AddressSetView addressSet,
			AddressSet p2CheckedAddresses, Collection<SourceFile> commonSources,
			TaskMonitor monitor) throws CancelledException {
		AddressSet results = new AddressSet();
		SourceFileManager p2Manager = program2.getSourceFileManager();
		for (SourceFile p2Source : commonSources) {
			for (SourceMapEntry p2Entry : p2Manager.getSourceMapEntries(p2Source)) {
				monitor.checkCancelled();
				Address p2Base = p2Entry.getBaseAddress();
				if (p2CheckedAddresses.contains(p2Base)) {
					continue;
				}
				Address p1Base = SimpleDiffUtility.getCompatibleAddress(program2, p2Base, program1);
				p2CheckedAddresses.add(p2Base);
				if (p1Base == null) {
					continue;
				}
				if (!addressSet.contains(p1Base)) {
					continue;
				}
				List<SourceMapEntry> p1Entries =
					program1.getSourceFileManager().getSourceMapEntries(p1Base);
				boolean p1BaseAlreadyChecked = false;
				for (SourceMapEntry p1Entry : p1Entries) {
					if (p1Entry.getBaseAddress().equals(p1Base)) {
						p1BaseAlreadyChecked = true;
						break;
					}
				}
				if (!p1BaseAlreadyChecked) {
					results.add(p1Base);
				}
			}
		}
		return results;
	}
Determines the source map differences for the addresses in {@code addressSet}.  Source map
entries which intersect but are not contained within {@code addressSet} are ignored.
The returned {@link AddressSet} consists of the minimum addresses of all of the differing
source map entries.  This method does not check for differences between non-mapped 
{@link SourceFile}s. 

@param addressSet addresses to check for differences (from program1)
@param monitor task monitor
@return minimum addresses of differing ranges
@throws CancelledException if user cancels
Ghidra/Features/Base/src/main/java/ghidra/program/util/ProgramDiff.java