public void create(Address addr) throws MemoryAccessException {

		/* use current program location if 'addr' is null */
		if (addr == null || monitor.isCancelled()) {
			return;
		}

		monitor.setMessage("Creating GCC Exception Table Header");
		Address baseAddr = addr;

		addr = createLPStartEncoding(addr);

		addr = createLPStartPointer(addr);

		addr = createTTypeEncoding(addr);

		addr = createTTypeOffset(addr);

		Address callSiteTableStart = addr;
		addr = createCallSiteTableEncoding(addr);

		addr = createCallSiteTableLength(addr);

		headerSize = addr.subtract(baseAddr);
		callSiteTableHeaderSize = addr.subtract(callSiteTableStart);

		Address extent = addr.add(getCallSiteTableLength() - 1);

		if (ttypeEncoding != OMITTED_ENCODING_TYPE) {
			ttypeAddr = baseAddr.add(ttypeOffset);
			extent = ttypeAddr;
		}

		tableBounds = new AddressRangeImpl(baseAddr, extent);

		String tableLabel = "lsda_exception_table_" + baseAddr;

		try {
			Symbol sym = program.getSymbolTable().getPrimarySymbol(baseAddr);
			if (sym == null) {
				sym =
					program.getSymbolTable().createLabel(baseAddr, tableLabel, SourceType.ANALYSIS);
			}
			else {
				sym.setName(tableLabel, SourceType.ANALYSIS);
			}
		}
		catch (Exception e) {
			// ignored
		}

		SetCommentCmd commentCmd =
			new SetCommentCmd(baseAddr, CommentType.PLATE, "(LSDA) Exception Table");
		commentCmd.applyTo(program);

		nextAddress = addr;
	}
Create a LSDA Header from the bytes at <code>addr</code>.
<br>Note: This method must get called before any of the "get..." methods.
@param addr the start (minimum address) of this LSDA header.
@throws MemoryAccessException if memory for the header couldn't be read.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/exceptionhandlers/gcc/structures/gccexcepttable/LSDAHeader.java