private void markupSectionHeaders(TaskMonitor monitor) {

		int headerCount = elf.getSectionHeaderCount();
		int size = elf.e_shentsize() * headerCount;
		if (size == 0) {
			return;
		}

		monitor.setMessage("Markup Section Headers ...");

		Structure shStructDt = (Structure) elf.getSections()[0].toDataType();
		shStructDt = shStructDt.clone(program.getDataTypeManager());

		Array arrayDt = new ArrayDataType(shStructDt, headerCount, elf.e_shentsize());

		Address headerAddr = findLoadAddress(elf.e_shoff(), size);

		// Create block for header if failed to locate load
		try {
			if (headerAddr == null) {
				if (!ElfLoaderOptionsFactory.includeOtherBlocks(options)) {
					return;
				}
				headerAddr = AddressSpace.OTHER_SPACE.getAddress(0);
				MemoryBlock block = createInitializedBlock(null, true,
					ELF_SECTION_HEADERS_BLOCK_NAME, headerAddr, elf.e_shoff(), arrayDt.getLength(),
					"Elf Section Headers", false, false, false, monitor);
				headerAddr = block.getStart();
			}

			addElfHeaderReferenceMarkup(elf.getShoffComponentOrdinal(), headerAddr);

			Data array =
				createData(headerAddr, program.getDataTypeManager().resolve(arrayDt, null));
			if (array == null) {
				return;
			}

			ElfSectionHeader[] sections = elf.getSections();
			monitor.initialize(sections.length);
			for (int i = 0; i < sections.length; i++) {
				monitor.checkCancelled();
				monitor.incrementProgress(1);

				Data d = array.getComponent(i);
				String comment = sections[i].getNameAsString();
				String type = sections[i].getTypeAsString();
				if (type != null) {
					comment = comment + " - " + type;
				}
				d.setComment(CommentType.EOL, comment);

				Address sectionAddr = findLoadAddress(sections[i], 0);
				if (sectionAddr != null) {
					// add reference to sh_addr component
					Data component = d.getComponent(3);
					component.addOperandReference(0, sectionAddr, RefType.DATA,
						SourceType.IMPORTED);
				}

				if (sections[i].getType() == ElfSectionHeaderConstants.SHT_SYMTAB_SHNDX) {
					markupSymbolSectionHeaderIndex(sections[i]);
				}
			}
		}
		catch (Exception e) {
			log("Failed to markup Elf section headers: " + getMessage(e));
		}
	}
Add reference to previously applied header structure (assumes markupElfHeader previously called)
@param componentOrdinal structure component ordinal
@param refAddr reference to-address
Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/ElfProgramBuilder.java