private AddressSet processDifferingSourceFiles(AddressSetView addressSet,
			Collection<SourceFile> p1Only, Collection<SourceFile> p2Only,
			SourceFileManager p1Manager, SourceFileManager p2Manager, TaskMonitor monitor)
			throws CancelledException {
		AddressSet result = new AddressSet();

		for (SourceFile p1Source : p1Only) {
			List<SourceMapEntry> p1Entries = p1Manager.getSourceMapEntries(p1Source);
			for (SourceMapEntry p1Entry : p1Entries) {
				monitor.checkCancelled();
				Address p1Base = p1Entry.getBaseAddress();
				if (p1Entry.getLength() == 0) {
					if (addressSet.contains(p1Base)) {
						result.add(p1Base);
					}
					continue;
				}
				Address p1End = p1Base.add(p1Entry.getLength() - 1);
				if (addressSet.contains(p1Base, p1End)) {
					result.add(p1Base);
					continue;
				}
				if (addressSet.intersects(p1Base, p1End)) {
					logSkippedEntry(p1Entry, program1);
				}
			}
		}

		for (SourceFile p2Source : p2Only) {
			List<SourceMapEntry> p2Entries = p2Manager.getSourceMapEntries(p2Source);
			for (SourceMapEntry p2Entry : p2Entries) {
				monitor.checkCancelled();
				Address p2Base = p2Entry.getBaseAddress();
				Address p1Base = SimpleDiffUtility.getCompatibleAddress(program2, p2Base, program1);
				if (p1Base == null) {
					continue;
				}
				long p2Length = p2Entry.getLength();
				if (p2Length == 0) {
					if (addressSet.contains(p1Base)) {
						result.add(p1Base);
					}
					continue;
				}
				Address p2End = p2Base.add(p2Length - 1);
				Address p1End = SimpleDiffUtility.getCompatibleAddress(program2, p2End, program1);
				if (p1End == null) {
					continue;
				}
				if (addressSet.contains(p1Base, p1End)) {
					result.add(p1Base);
					continue;
				}
				if (addressSet.intersects(p1Base, p1End)) {
					logSkippedEntry(p2Entry, program2);
				}
			}
		}
		return result;
	}
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