@Override
	public CodeBlock getFirstCodeBlockContaining(Address addr, TaskMonitor monitor) throws CancelledException {

        // First check out the Block cache
        CodeBlock block = foundOSubs.getFirstBlockContaining(addr);
        if (block != null) {
            return block;
        }

        CodeBlock modelMSub = modelM.getFirstCodeBlockContaining(addr, monitor);
        if (modelMSub == null) {
			return null;
		}
        Address[] entPts = modelMSub.getStartAddresses();

        // Single-entry MSub same as OSub
        int cnt = entPts.length;
        if (cnt == 1){
            return createSub(modelMSub, entPts[0]);
        }

        // Return first OSub which contains addr
        for (int i = 0; i < cnt; i++) {
            block = getSubroutine(entPts[i], monitor);
            if (block != null && block.contains(addr)) {
				return block;
			}
        }
        return null;
    }
@see ghidra.program.model.block.CodeBlockModel#getFirstCodeBlockContaining(ghidra.program.model.address.Address, ghidra.util.task.TaskMonitor)
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/block/OverlapCodeSubModel.java