diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/processors/generic/PcodeFieldFactory.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/processors/generic/PcodeFieldFactory.java index e451fc4a34..6d995776bc 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/processors/generic/PcodeFieldFactory.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/processors/generic/PcodeFieldFactory.java @@ -86,9 +86,8 @@ public class PcodeFieldFactory extends FieldFactory { ArrayList elements = new ArrayList<>(); - List pcodeListing = - formatter.formatOps(instr.getProgram().getLanguage(), - Arrays.asList(instr.getPcode(true))); + List pcodeListing = formatter.formatOps(instr.getProgram().getLanguage(), + instr.getProgram().getAddressFactory(), Arrays.asList(instr.getPcode(true))); int lineCnt = pcodeListing.size(); for (int i = 0; i < lineCnt; i++) { elements.add(new TextFieldElement(pcodeListing.get(i), i, 0)); @@ -129,8 +128,8 @@ public class PcodeFieldFactory extends FieldFactory { Instruction instr = (Instruction) obj; Program program = instr.getProgram(); - List attributedStrings = - formatter.formatOps(program.getLanguage(), Arrays.asList(instr.getPcode(true))); + List attributedStrings = formatter.formatOps(program.getLanguage(), + program.getAddressFactory(), Arrays.asList(instr.getPcode(true))); List strings = new ArrayList<>(attributedStrings.size()); for (AttributedString attributedString : attributedStrings) { strings.add(attributedString.getText()); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/pcode/PcodeFormatter.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/pcode/PcodeFormatter.java index 00ec5ca990..c2878e54c9 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/pcode/PcodeFormatter.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/pcode/PcodeFormatter.java @@ -26,15 +26,28 @@ import ghidra.program.model.pcode.Varnode; public interface PcodeFormatter { /** - * Format the the p-code ops + * Format the p-code ops * * @param language the language generating the p-code * @param pcodeOps the p-code ops * @return the formatted result */ default T formatOps(Language language, List pcodeOps) { - return formatTemplates(language, - getPcodeOpTemplates(language.getAddressFactory(), pcodeOps)); + return formatOps(language, language.getAddressFactory(), pcodeOps); + } + + /** + * Format the pcode ops with a specified {@link AddressFactory}. For use when the + * pcode ops can reference program-specific address spaces. + * + * @param language the language generating the p-code + * @param addrFactory addressFactory to use when generating pcodeop templates + * @param pcodeOps p-code ops to format + * @return the formatted result + * + */ + default T formatOps(Language language, AddressFactory addrFactory, List pcodeOps) { + return formatTemplates(language, getPcodeOpTemplates(addrFactory, pcodeOps)); } /**