private DWARFLineProgramInstruction executeExtended(long instrOffset) throws IOException {
		int length = reader.readNextUnsignedVarIntExact(LEB128::unsigned);

		long oldIndex = reader.getPointerIndex();
		int extendedOpcode = reader.readNextByte();

		String instr = DWARFLineNumberExtendedOpcodes.toString(extendedOpcode);
		List<Number> operands = List.of();
		DWARFLineProgramState row = null;

		switch (extendedOpcode) {
			case DW_LNE_end_sequence:
				// end_seq is a special marker, and by definition specifies a row that is one byte
				// after the last instruction of the sequence. 
				state.isEndSequence = true;
				row = currentState();
				row.address--; // tweak backwards 1 byte
				state = new DWARFLineProgramState(defaultIsStatement);
				break;
			case DW_LNE_set_address:
				state.address = reader.readNextUnsignedValue(pointerSize);
				operands = List.of(state.address);
				break;
			case DW_LNE_define_file: {
				// this instruction is deprecated in v5+, and not fully supported in this
				// impl
				String sourceFilename = reader.readNextUtf8String();
				int dirIndex = reader.readNextUnsignedVarIntExact(LEB128::unsigned);
				long lastMod = reader.readNext(LEB128::unsigned);
				long fileLen = reader.readNext(LEB128::unsigned);
				break;
			}
			case DW_LNE_set_discriminator:
				state.discriminator = reader.readNext(LEB128::unsigned);
				operands = List.of(state.discriminator);
				break;
			default:
				throw new DWARFLineException("Unknown extended instruction: " + instr);
		}

		if (oldIndex + length != reader.getPointerIndex()) {
			throw new DWARFLineException("Bad extended opcode decoding, length mismatch @0x%x: %s"
					.formatted(oldIndex, instr));
		}

		return new DWARFLineProgramInstruction(instrOffset, instr, operands, row);
	}
Read the next instruction and executes it

@return 
@throws IOException if an i/o error occurs
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/line/DWARFLineProgramExecutor.java