@Override
			public boolean process(PseudoInstruction instr) {
				if (instr == null) {
					return false;
				}
				FlowType ftype = instr.getFlowType();
				if (ftype.isTerminal()) {
					String mnemonicStr = instr.getMnemonicString().toLowerCase();
					if ("ret".equals(mnemonicStr) || "retf".equals(mnemonicStr)) {
						// x86 has a scalar operand to purge value from the stack
						tempPurge = 0;
						Scalar scalar = instr.getScalar(0);
						if (scalar != null) {
							tempPurge = (int) scalar.getSignedValue();
							forwardLibrary = null;
							forwardSymbol = null;
							return false;
						}
					}
				}
				if (ftype.isJump() && ftype.isComputed()) {
					Reference[] refs = instr.getReferencesFrom();
					if (refs.length > 0) {
						Data data = instr.getProgram()
								.getListing()
								.getDefinedDataAt(refs[0].getToAddress());
						if (data != null) {
							refs = instr.getProgram()
									.getReferenceManager()
									.getReferencesFrom(data.getMinAddress());
							if (refs != null && refs.length > 0 && refs[0].isExternalReference()) {
								ExternalReference exRef = (ExternalReference) refs[0];
								forwardLibrary = exRef.getLibraryName();
								forwardSymbol = exRef.getLabel();
							}
						}
					}
				}
				return true;
			}
Construct a library symbol table based upon a specified library in the 
form of a {@link Program} object.
@param library library program
@param monitor task monitor
@throws CancelledException thrown if task cancelled
Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/LibrarySymbolTable.java