public void create(Address addr) throws MemoryAccessException {

		records.clear();

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

		LSDAHeader header = region.getLSDATable().getHeader();

		if (header.getCallSiteTableLength() <= 0) {
			return;
		}

		Address baseAddr = addr;
		monitor.setMessage("Creating GCC LSDA Call Site Table ");

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

		Address limit = baseAddr.add(header.getCallSiteTableLength() - 1);

		DwarfEHDecoder callSiteDecoder =
			DwarfDecoderFactory.getDecoder(header.getCallSiteTableEncoding());

		long remain = limit.subtract(addr);

		do {
			LSDACallSiteRecord rec = new LSDACallSiteRecord(monitor, program, region);
			rec.create(addr, callSiteDecoder);

			verifyCallSiteRecord(rec);

			records.add(rec);

			addr = rec.getNextAddress();
			remain = limit.subtract(addr);

		}
		while (remain > 0);

		bounds = new AddressRangeImpl(baseAddr, baseAddr.add(header.getCallSiteTableLength()));

		nextAddress = addr;
	}
Create a LSDA Call Site Table 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 call site table.
@throws MemoryAccessException if memory couldn't be accessed for the call site table
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/exceptionhandlers/gcc/structures/gccexcepttable/LSDACallSiteTable.java