@Override
	public void markup(Program program, MachHeader header, String source, TaskMonitor monitor,
			MessageLog log) throws CancelledException {
		Address addr = fileOffsetToAddress(program, header, dataoff, datasize);
		if (addr == null) {
			return;
		}
		super.markup(program, header, source, monitor, log);
		
		SegmentCommand textSegment = header.getSegment(SegmentNames.SEG_TEXT);
		if (textSegment == null) {
			return;
		}

		try {
			ReferenceManager referenceManager = program.getReferenceManager();
			Address textSegmentAddr = program.getAddressFactory()
					.getDefaultAddressSpace()
					.getAddress(textSegment.getVMaddress());
			long currentFuncOffset = 0;
			for (LEB128Info leb : lebs) {
				Data d = DataUtilities.createData(program, addr, ULEB128, -1,
					DataUtilities.ClearDataMode.CHECK_FOR_SPACE);
				addr = addr.add(leb.getLength());
				currentFuncOffset += leb.asLong();
				Reference ref = referenceManager.addMemoryReference(d.getMinAddress(),
					textSegmentAddr.add(currentFuncOffset),
					RefType.DATA, SourceType.IMPORTED, 0);
				referenceManager.setPrimary(ref, true);
			}

		}
		catch (Exception e) {
			log.appendMsg(FunctionStartsCommand.class.getSimpleName(),
				"Failed to markup: " + getContextualName(source, null));
		}
	}
Finds the {@link List} of function start addresses

@param textSegmentAddr The {@link Address} of the function starts' __TEXT segment
@return The {@link List} of function start addresses
@throws IOException if there was an issue reading bytes
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/macho/commands/FunctionStartsCommand.java