diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/RegisterManager.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/RegisterManager.java index 631e7721dd..92f16dc430 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/RegisterManager.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/RegisterManager.java @@ -23,11 +23,11 @@ public class RegisterManager { private List registers; private Map registerNameMap = new HashMap(); // include aliases and case-variations - + private List registerNames; // alphabetical sorted list, excludes aliases private List contextRegisters; private Register contextBaseRegister; - + private Map sizeMap = new HashMap(); private Map> registerAddressMap = new HashMap>(); @@ -124,6 +124,11 @@ public class RegisterManager { populateSizeMapLittleEndian(reg); } } + // if there is no context register, force a default one + if (contextBaseRegister == null) { + contextBaseRegister = + new Register("DEFAULT_CONTEXT", "DEFAULT_CONTEXT", Address.NO_ADDRESS, 4, true, 0); + } // handle the register size 0 case; Collections.reverse(registerListSortedBySize); for (Register register : registerListSortedBySize) { @@ -275,7 +280,8 @@ public class RegisterManager { */ private static int compareVectorRegisters(Register reg1, Register reg2) { if (!(reg1.isVectorRegister() && reg2.isVectorRegister())) { - throw new IllegalArgumentException("compareVectorRegisters can only be applied to vector registers!"); + throw new IllegalArgumentException( + "compareVectorRegisters can only be applied to vector registers!"); } //want registers sorted in descending order of size int sizeComp = Integer.compare(reg2.getBitLength(), reg1.getBitLength()); diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/AbstractProgramContext.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/AbstractProgramContext.java index 3817a2c21f..7b8ee00897 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/AbstractProgramContext.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/AbstractProgramContext.java @@ -18,13 +18,12 @@ package ghidra.program.util; import java.util.Arrays; import java.util.List; -import ghidra.program.model.address.Address; import ghidra.program.model.lang.*; import ghidra.program.model.listing.DefaultProgramContext; import ghidra.program.model.listing.ProgramContext; abstract public class AbstractProgramContext implements ProgramContext, DefaultProgramContext { - + protected Language language; protected Register baseContextRegister; @@ -116,10 +115,6 @@ abstract public class AbstractProgramContext implements ProgramContext, DefaultP protected void init(Language lang) { this.language = lang; baseContextRegister = lang.getContextBaseRegister(); - if (baseContextRegister == null) { - baseContextRegister = - new Register("DEFAULT_CONTEXT", "DEFAULT_CONTEXT", Address.NO_ADDRESS, 4, true, 0); - } defaultDisassemblyContext = new RegisterValue(baseContextRegister); nonFlowingContextRegisterMask = baseContextRegister.getBaseMask().clone();