diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/DebuggerTracePcodeEmulator.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/DebuggerTracePcodeEmulator.java index 1600f47d8f..fbf36821a8 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/DebuggerTracePcodeEmulator.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/DebuggerTracePcodeEmulator.java @@ -61,7 +61,7 @@ public class DebuggerTracePcodeEmulator extends TracePcodeEmulator { protected BytesPcodeThread createThread(String name) { BytesPcodeThread thread = super.createThread(name); Register contextreg = language.getContextBaseRegister(); - if (contextreg != null && !isRegisterKnown(name, contextreg)) { + if (contextreg != Register.NO_CONTEXT && !isRegisterKnown(name, contextreg)) { RegisterValue context = trace.getRegisterContextManager() .getValueWithDefault(language, contextreg, snap, thread.getCounter()); thread.overrideContext(context); @@ -71,8 +71,7 @@ public class DebuggerTracePcodeEmulator extends TracePcodeEmulator { @Override protected PcodeExecutorState createSharedState() { - return new ReadsTargetMemoryPcodeExecutorState(tool, trace, snap, null, 0, - recorder); + return new ReadsTargetMemoryPcodeExecutorState(tool, trace, snap, null, 0, recorder); } @Override diff --git a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceCodeManager.java b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceCodeManager.java index df99459172..aa0baf6bd4 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceCodeManager.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceCodeManager.java @@ -15,7 +15,7 @@ */ package ghidra.trace.database.listing; -import static ghidra.lifecycle.Unfinished.TODO; +import static ghidra.lifecycle.Unfinished.*; import java.io.IOException; import java.math.BigInteger; @@ -149,7 +149,7 @@ public class DBTraceCodeManager static RegisterValue getBaseContextValue(Language language, byte[] context, Address address) { Register register = language.getContextBaseRegister(); - if (register == null) { + if (register == Register.NO_CONTEXT) { return null; } if (context == null) { @@ -193,8 +193,7 @@ public class DBTraceCodeManager protected final Map undefinedCache = CacheBuilder.newBuilder() - .removalListener( - this::undefinedRemovedFromCache) + .removalListener(this::undefinedRemovedFromCache) .weakValues() .build() .asMap(); @@ -356,8 +355,8 @@ public class DBTraceCodeManager } monitor.setMessage("Clearing instruction prototypes"); monitor.setMaximum(protoStore.getRecordCount()); - for (Iterator it = - protoStore.asMap().values().iterator(); it.hasNext();) { + for (Iterator it = protoStore.asMap().values().iterator(); it + .hasNext();) { monitor.checkCanceled(); monitor.incrementProgress(1); DBTraceCodePrototypeEntry protoEnt = it.next(); @@ -491,9 +490,9 @@ public class DBTraceCodeManager } Collection> changes = new ArrayList<>(); for (DBTraceCodeSpace space : memSpaces.values()) { - changes.addAll(space.dataMapSpace - .reduce(TraceAddressSnapRangeQuery.added(from, to, space.space)) - .values()); + changes.addAll( + space.dataMapSpace.reduce(TraceAddressSnapRangeQuery.added(from, to, space.space)) + .values()); changes.addAll(space.instructionMapSpace .reduce(TraceAddressSnapRangeQuery.added(from, to, space.space)) .values()); @@ -512,9 +511,9 @@ public class DBTraceCodeManager } Collection> changes = new ArrayList<>(); for (DBTraceCodeSpace space : memSpaces.values()) { - changes.addAll(space.dataMapSpace - .reduce(TraceAddressSnapRangeQuery.removed(from, to, space.space)) - .values()); + changes.addAll( + space.dataMapSpace.reduce(TraceAddressSnapRangeQuery.removed(from, to, space.space)) + .values()); changes.addAll(space.instructionMapSpace .reduce(TraceAddressSnapRangeQuery.removed(from, to, space.space)) .values()); diff --git a/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java b/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java index 2947a4bd6c..9cbfd618d0 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java @@ -296,7 +296,7 @@ public class TracePcodeEmulatorTest extends AbstractGhidraHeadlessIntegrationTes @Test public void testIMM() throws Throwable { try (ToyDBTraceBuilder tb = new ToyDBTraceBuilder("Test", "Toy:BE:64:default")) { - assertEquals(Register.DEFAULT_CONTEXT, tb.language.getContextBaseRegister()); + assertEquals(Register.NO_CONTEXT, tb.language.getContextBaseRegister()); TraceThread thread = initTrace(tb, List.of( diff --git a/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/trace/database/listing/DBTraceCodeUnitTest.java b/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/trace/database/listing/DBTraceCodeUnitTest.java index 440c137371..95dd3597ff 100644 --- a/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/trace/database/listing/DBTraceCodeUnitTest.java +++ b/Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/trace/database/listing/DBTraceCodeUnitTest.java @@ -1196,7 +1196,7 @@ public class DBTraceCodeUnitTest extends AbstractGhidraHeadlessIntegrationTest } // TODO: Test with non-default context - assertEquals(Register.DEFAULT_CONTEXT, i4004.getBaseContextRegister()); + assertEquals(Register.NO_CONTEXT, i4004.getBaseContextRegister()); assertEquals(b.language.getRegisters(), i4004.getRegisters()); assertEquals(r4, i4004.getRegister("r4")); diff --git a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/emu/DefaultPcodeThread.java b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/emu/DefaultPcodeThread.java index 24ecd2b89e..32c1610321 100644 --- a/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/emu/DefaultPcodeThread.java +++ b/Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/emu/DefaultPcodeThread.java @@ -124,7 +124,7 @@ public class DefaultPcodeThread implements PcodeThread { this.pc = language.getProgramCounter(); this.contextreg = language.getContextBaseRegister(); - if (contextreg != Register.DEFAULT_CONTEXT) { + if (contextreg != Register.NO_CONTEXT) { defaultContext = new ProgramContextImpl(language); language.applyContextSettings(defaultContext); this.context = defaultContext.getDefaultDisassemblyContext(); @@ -196,7 +196,7 @@ public class DefaultPcodeThread implements PcodeThread { @Override public void overrideContextWithDefault() { - if (contextreg != Register.DEFAULT_CONTEXT) { + if (contextreg != Register.NO_CONTEXT) { overrideContext(defaultContext.getDefaultValue(contextreg, counter)); } } @@ -212,7 +212,7 @@ public class DefaultPcodeThread implements PcodeThread { long offset = arithmetic.toConcrete(state.getVar(pc)).longValue(); setCounter(language.getDefaultSpace().getAddress(offset)); - if (contextreg != Register.DEFAULT_CONTEXT) { + if (contextreg != Register.NO_CONTEXT) { try { BigInteger ctx = arithmetic.toConcrete(state.getVar(contextreg)); assignContext(new RegisterValue(contextreg, ctx)); @@ -277,7 +277,7 @@ public class DefaultPcodeThread implements PcodeThread { if (frame.isFallThrough()) { overrideCounter(counter.addWrap(decoder.getLastLengthWithDelays())); } - if (contextreg != Register.DEFAULT_CONTEXT) { + if (contextreg != Register.NO_CONTEXT) { overrideContext(instruction.getRegisterValue(contextreg)); } postExecuteInstruction(); diff --git a/Ghidra/Features/Base/developer_scripts/ForceRedisassembly.java b/Ghidra/Features/Base/developer_scripts/ForceRedisassembly.java index cfa36f70d1..ad13cce93b 100644 --- a/Ghidra/Features/Base/developer_scripts/ForceRedisassembly.java +++ b/Ghidra/Features/Base/developer_scripts/ForceRedisassembly.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,44 +22,48 @@ import ghidra.program.util.LanguageTranslatorAdapter; import ghidra.util.Msg; import ghidra.util.exception.AssertException; - public class ForceRedisassembly extends GhidraScript { - + @Override - public void run() throws Exception { - + public void run() throws Exception { + if (currentProgram == null) { Msg.showError(this, null, "No Program Error", "No active program found"); return; } - ProgramDB program = (ProgramDB)currentProgram; - + ProgramDB program = (ProgramDB) currentProgram; + Language lang = program.getLanguage(); - - LanguageTranslator translator = new MyLanguageTranslator(lang.getLanguageID(), lang.getVersion()); + + LanguageTranslator translator = + new MyLanguageTranslator(lang.getLanguageID(), lang.getVersion()); if (!translator.isValid()) { return; } - - program.setLanguage(translator, program.getCompilerSpec().getCompilerSpecID(), true, monitor); + + program.setLanguage(translator, program.getCompilerSpec().getCompilerSpecID(), true, + monitor); } private static class MyLanguageTranslator extends LanguageTranslatorAdapter { protected MyLanguageTranslator(LanguageID languageId, int version) { super(languageId, version, languageId, version); } + @Override public boolean isValid() { if (super.isValid()) { try { validateDefaultSpaceMap(); - } catch (IncompatibleLanguageException e) { - throw new AssertException(); + } + catch (IncompatibleLanguageException e) { + throw new AssertException(); } Register newContextReg = getNewLanguage().getContextBaseRegister(); - if (newContextReg != null) { + if (newContextReg != Register.NO_CONTEXT) { Register oldContextReg = getOldLanguage().getContextBaseRegister(); - if (oldContextReg == null || !isSameRegisterConstruction(oldContextReg, newContextReg)) { + if (oldContextReg != Register.NO_CONTEXT || + !isSameRegisterConstruction(oldContextReg, newContextReg)) { throw new AssertException(); } } @@ -68,11 +71,12 @@ public class ForceRedisassembly extends GhidraScript { } return false; } - + @Override public String toString() { - return "[" + getOldLanguageID() + " (Version " + getOldVersion() + ")] -> [" + - getNewLanguageID() + " (Version " + getNewVersion() + ")] {Forced Re-Disassembly Translator}"; + return "[" + getOldLanguageID() + " (Version " + getOldVersion() + ")] -> [" + + getNewLanguageID() + " (Version " + getNewVersion() + + ")] {Forced Re-Disassembly Translator}"; } } } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/CodeUnitMerger.java b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/CodeUnitMerger.java index 414f6a941c..2ecad11675 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/CodeUnitMerger.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/CodeUnitMerger.java @@ -147,10 +147,10 @@ class CodeUnitMerger extends AbstractListingMerger { mergeLatest = listingMergeMgr.mergeLatest; mergeOriginal = listingMergeMgr.mergeOriginal; - myResolvedDts = (Map) mergeManager.getResolveInformation( - MergeConstants.RESOLVED_MY_DTS); - origResolvedDts = (Map) mergeManager.getResolveInformation( - MergeConstants.RESOLVED_ORIGINAL_DTS); + myResolvedDts = (Map) mergeManager + .getResolveInformation(MergeConstants.RESOLVED_MY_DTS); + origResolvedDts = (Map) mergeManager + .getResolveInformation(MergeConstants.RESOLVED_ORIGINAL_DTS); mergedCodeUnits = new AddressSet(); @@ -775,7 +775,7 @@ class CodeUnitMerger extends AbstractListingMerger { // May cause the merge code unit to lose info attached to it, such as references. resultListing.clearCodeUnits(range.getMinAddress(), range.getMaxAddress(), false); - if (contextReg != null) { + if (contextReg != Register.NO_CONTEXT) { // Copy context register value mergeProgramContext(resultContext, originContext, originContext.getBaseContextRegister(), range, monitor); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/clear/ClearFlowAndRepairCmd.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/clear/ClearFlowAndRepairCmd.java index 2e717c0796..6188600b22 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/clear/ClearFlowAndRepairCmd.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/clear/ClearFlowAndRepairCmd.java @@ -366,8 +366,8 @@ public class ClearFlowAndRepairCmd extends BackgroundCommand { // re-parse instruction to regenerate fall-through context program.getLanguage().parse(instr, context, instr.isInDelaySlot()); RegisterValue contextValue = context.getFlowContextValue(fallThroughAddr, true); - program.getProgramContext().setRegisterValue(fallThroughAddr, fallThroughAddr, - contextValue); + program.getProgramContext() + .setRegisterValue(fallThroughAddr, fallThroughAddr, contextValue); } catch (Exception e) { return; @@ -413,7 +413,7 @@ public class ClearFlowAndRepairCmd extends BackgroundCommand { continue; } disassemblePoints.addRange(addr, addr); - if (contextReg != null) { + if (contextReg != Register.NO_CONTEXT) { if (seedContext == null) { seedContext = new DisassemblerContextImpl(programContext); } @@ -503,7 +503,7 @@ public class ClearFlowAndRepairCmd extends BackgroundCommand { if (ftAddr != null && (ignoreStart == null || !ftAddr.equals(ignoreStart))) { // alreadyCleared.addRange(ftAddr, addr); disassemblePoints.addRange(ftAddr, ftAddr); - if (contextReg != null) { + if (contextReg != Register.NO_CONTEXT) { if (seedContext == null) { seedContext = new DisassemblerContextImpl(programContext); } @@ -523,8 +523,9 @@ public class ClearFlowAndRepairCmd extends BackgroundCommand { // clearSet.add(alreadyCleared); // Get rid of any bad bookmarks at seed points, will be put back if they are still bad. - program.getBookmarkManager().removeBookmarks(disassemblePoints, BookmarkType.ERROR, - Disassembler.ERROR_BOOKMARK_CATEGORY, monitor); + program.getBookmarkManager() + .removeBookmarks(disassemblePoints, BookmarkType.ERROR, + Disassembler.ERROR_BOOKMARK_CATEGORY, monitor); // Disassemble fallthrough reference points DisassembleCommand cmd = new DisassembleCommand(disassemblePoints, null); @@ -651,9 +652,10 @@ public class ClearFlowAndRepairCmd extends BackgroundCommand { if (protectedSet.contains(fromBlock.getMinAddress())) { continue; } - fromBlock = adjustBlockForSplitProtectedBlock(program, blockModel, fromBlock.getFirstStartAddress(), fromBlock); + fromBlock = adjustBlockForSplitProtectedBlock(program, blockModel, + fromBlock.getFirstStartAddress(), fromBlock); - // HOT SPOT - getDestinations() + // HOT SPOT - getDestinations() CodeBlockReferenceIterator blockRefIter = fromBlock.getDestinations(monitor); if (clearOffcut) { findDestAddrs(fromBlock, destAddrs); // Needed for detecting offcut flows @@ -661,7 +663,7 @@ public class ClearFlowAndRepairCmd extends BackgroundCommand { while (blockRefIter.hasNext()) { monitor.checkCanceled(); CodeBlockReference cbRef = blockRefIter.next(); - + Address blockAddr = cbRef.getReference(); if (protectedSet.contains(blockAddr)) { continue; @@ -671,7 +673,8 @@ public class ClearFlowAndRepairCmd extends BackgroundCommand { } CodeBlock destBlock = cbRef.getDestinationBlock(); if (blockAddr.equals(destBlock.getFirstStartAddress())) { - destBlock = adjustBlockForSplitProtectedBlock(program, blockModel, blockAddr, destBlock); + destBlock = adjustBlockForSplitProtectedBlock(program, blockModel, blockAddr, + destBlock); } if (neverSnipStartBlock && destBlock.equals(startBlock)) { continue; // do not allow incoming edges to startBlock vertex @@ -696,13 +699,13 @@ public class ClearFlowAndRepairCmd extends BackgroundCommand { continue; } } - // TODO: check disassembly hint + // TODO: check disassembly hint blockSet.add(destBlock); destVertex = new BlockVertex(destBlock); vertexMap.put(blockAddr, destVertex); todoVertices.push(destVertex); } - // HOT SPOT - HashSet.add() + // HOT SPOT - HashSet.add() fromVertex.destVertices.add(destVertex); destVertex.srcVertices.add(fromVertex); } @@ -767,8 +770,8 @@ public class ClearFlowAndRepairCmd extends BackgroundCommand { return blockSet; } - private CodeBlock adjustBlockForSplitProtectedBlock(Program program, SimpleBlockModel blockModel, Address blockAddr, - CodeBlock blockToAdjust) { + private CodeBlock adjustBlockForSplitProtectedBlock(Program program, + SimpleBlockModel blockModel, Address blockAddr, CodeBlock blockToAdjust) { if (!protectedSet.isEmpty()) { AddressSet intersect = protectedSet.intersectRange(blockToAdjust.getMinAddress(), blockToAdjust.getMaxAddress()); @@ -857,8 +860,9 @@ public class ClearFlowAndRepairCmd extends BackgroundCommand { public static void clearBadBookmarks(Program program, Address start, Address end, TaskMonitor monitor) throws CancelledException { AddressSet set = new AddressSet(start, end); - program.getBookmarkManager().removeBookmarks(set, BookmarkType.ERROR, - Disassembler.ERROR_BOOKMARK_CATEGORY, monitor); + program.getBookmarkManager() + .removeBookmarks(set, BookmarkType.ERROR, Disassembler.ERROR_BOOKMARK_CATEGORY, + monitor); } public static void clearBadBookmarks(Program program, AddressSetView set, TaskMonitor monitor) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/DisassemblerPlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/DisassemblerPlugin.java index e97357118b..678c49bdea 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/DisassemblerPlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/DisassemblerPlugin.java @@ -149,15 +149,12 @@ public class DisassemblerPlugin extends Plugin { return; } Options options = program.getOptions(Program.DISASSEMBLER_PROPERTIES); - options.registerOption(Disassembler.MARK_BAD_INSTRUCTION_PROPERTY, true, - null, "Place ERROR Bookmark at locations where disassembly could not be perfomed."); - options.registerOption( - Disassembler.MARK_UNIMPL_PCODE_PROPERTY, - true, - null, + options.registerOption(Disassembler.MARK_BAD_INSTRUCTION_PROPERTY, true, null, + "Place ERROR Bookmark at locations where disassembly could not be perfomed."); + options.registerOption(Disassembler.MARK_UNIMPL_PCODE_PROPERTY, true, null, "Place WARNING Bookmark at locations where a disassembled instruction has unimplemented pcode."); - options.registerOption(Disassembler.RESTRICT_DISASSEMBLY_TO_EXECUTE_MEMORY_PROPERTY, - false, null, "Restrict disassembly to executable memory blocks."); + options.registerOption(Disassembler.RESTRICT_DISASSEMBLY_TO_EXECUTE_MEMORY_PROPERTY, false, + null, "Restrict disassembly to executable memory blocks."); } ////////////////////////////////////////////////////////////////////// @@ -179,7 +176,7 @@ public class DisassemblerPlugin extends Plugin { mipsDisassembleAction = new MipsDisassembleAction(this, GROUP_NAME, false); mips16DisassembleAction = new MipsDisassembleAction(this, GROUP_NAME, true); ppcDisassembleAction = new PowerPCDisassembleAction(this, GROUP_NAME, false); - ppcVleDisassembleAction= new PowerPCDisassembleAction(this, GROUP_NAME, true); + ppcVleDisassembleAction = new PowerPCDisassembleAction(this, GROUP_NAME, true); setFlowOverrideAction = new SetFlowOverrideAction(this, GROUP_NAME); tool.addAction(disassembleAction); @@ -236,8 +233,8 @@ public class DisassemblerPlugin extends Plugin { Program currentProgram = context.getProgram(); DisassembleCommand cmd = null; - boolean isDynamicListing = - (context instanceof CodeViewerActionContext && ((CodeViewerActionContext) context).isDyanmicListing()); + boolean isDynamicListing = (context instanceof CodeViewerActionContext && + ((CodeViewerActionContext) context).isDyanmicListing()); if ((currentSelection != null) && (!currentSelection.isEmpty())) { cmd = new DisassembleCommand(currentSelection, null, true); @@ -276,7 +273,8 @@ public class DisassemblerPlugin extends Plugin { } } - boolean checkDisassemblyEnabled(ListingActionContext context, Address address, boolean followPtr) { + boolean checkDisassemblyEnabled(ListingActionContext context, Address address, + boolean followPtr) { ProgramSelection currentSelection = context.getSelection(); Program currentProgram = context.getProgram(); if ((currentSelection != null) && (!currentSelection.isEmpty())) { @@ -304,7 +302,7 @@ public class DisassemblerPlugin extends Plugin { public void setDefaultContext(ListingActionContext context) { Program contextProgram = context.getProgram(); Register baseContextReg = contextProgram.getLanguage().getContextBaseRegister(); - if (baseContextReg != null && baseContextReg.hasChildren()) { + if (baseContextReg != Register.NO_CONTEXT && baseContextReg.hasChildren()) { tool.showDialog(new ProcessorStateDialog(contextProgram.getProgramContext()), context.getComponentProvider()); } @@ -312,7 +310,7 @@ public class DisassemblerPlugin extends Plugin { public boolean hasContextRegisters(Program currentProgram) { Register baseContextReg = currentProgram.getLanguage().getContextBaseRegister(); - return baseContextReg != null && baseContextReg.hasChildren(); + return baseContextReg != Register.NO_CONTEXT && baseContextReg.hasChildren(); } public void disassembleArmCallback(ListingActionContext context, boolean thumbMode) { @@ -338,7 +336,7 @@ public class DisassemblerPlugin extends Plugin { tool.executeBackgroundCommand(cmd, currentProgram); } } - + public void disassembleHcs12Callback(ListingActionContext context, boolean xgMode) { ProgramSelection currentSelection = context.getSelection(); ProgramLocation currentLocation = context.getLocation(); @@ -362,7 +360,7 @@ public class DisassemblerPlugin extends Plugin { tool.executeBackgroundCommand(cmd, currentProgram); } } - + public void disassembleMipsCallback(ListingActionContext context, boolean mips16) { ProgramSelection currentSelection = context.getSelection(); ProgramLocation currentLocation = context.getLocation(); @@ -392,7 +390,7 @@ public class DisassemblerPlugin extends Plugin { ProgramLocation currentLocation = context.getLocation(); Program currentProgram = context.getProgram(); PowerPCDisassembleCommand cmd = null; - + if ((currentSelection != null) && (!currentSelection.isEmpty())) { cmd = new PowerPCDisassembleCommand(currentSelection, null, vle); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/table/TableServicePlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/table/TableServicePlugin.java index 5dc7838e38..51d75c9561 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/table/TableServicePlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/table/TableServicePlugin.java @@ -36,6 +36,7 @@ import ghidra.framework.model.DomainObjectListener; import ghidra.framework.plugintool.*; import ghidra.framework.plugintool.util.PluginStatus; import ghidra.program.model.listing.Program; +import ghidra.util.Swing; import ghidra.util.table.GhidraProgramTableModel; import ghidra.util.table.actions.DeleteTableRowAction; import ghidra.util.task.SwingUpdateManager; @@ -73,7 +74,7 @@ public class TableServicePlugin extends ProgramPlugin // Unusual Code: We, as a plugin, don't have any actions. Our transient tables do have // actions. We need a way to have keybindings shared for all the different // actions. Further, we need to register them now, not when the transient - // providers are created, as they would only appear in the options at + // providers are created, as they would only appear in the options at // that point. // DeleteTableRowAction.registerDummy(tool, getName()); @@ -265,16 +266,13 @@ public class TableServicePlugin extends ProgramPlugin navigatable = gotoService.getDefaultNavigatable(); } - TableChooserDialog dialog = - new MyTableChooserDialog(this, executor, program, title, navigatable, isModal); + Navigatable nav = navigatable; + TableChooserDialog dialog = Swing.runNow( + () -> new MyTableChooserDialog(this, executor, program, title, nav, isModal)); - List list = programToDialogMap.get(program); - if (list == null) { - list = new ArrayList<>(); - programToDialogMap.put(program, list); - } + List list = + programToDialogMap.computeIfAbsent(program, p -> new ArrayList<>()); list.add(dialog); return dialog; } - } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/GenerateOldLanguagePlugin.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/GenerateOldLanguagePlugin.java index 9f1da8c523..8da7f2655c 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/GenerateOldLanguagePlugin.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/debug/GenerateOldLanguagePlugin.java @@ -66,10 +66,10 @@ import ghidra.util.xml.GenericXMLOutputter; //@formatter:on public class GenerateOldLanguagePlugin extends Plugin implements FrontEndable { - private static final ExtensionFileFilter OLD_LANG_FILTER = new ExtensionFileFilter("lang", - "Old Language File"); - private static final ExtensionFileFilter TRANSLATOR_FILTER = new ExtensionFileFilter("trans", - "Simple Translator File"); + private static final ExtensionFileFilter OLD_LANG_FILTER = + new ExtensionFileFilter("lang", "Old Language File"); + private static final ExtensionFileFilter TRANSLATOR_FILTER = + new ExtensionFileFilter("trans", "Simple Translator File"); private DockingAction generateOldLanguageAction; private DockingAction generateTranslatorAction; @@ -95,8 +95,8 @@ public class GenerateOldLanguagePlugin extends Plugin implements FrontEndable { } }; // ACTIONS - auto generated - generateOldLanguageAction.setMenuBarData(new MenuData(new String[] { "File", - "Generate Old Language File..." }, null, "Language")); + generateOldLanguageAction.setMenuBarData(new MenuData( + new String[] { "File", "Generate Old Language File..." }, null, "Language")); generateOldLanguageAction.setEnabled(true); tool.addAction(generateOldLanguageAction); @@ -116,8 +116,8 @@ public class GenerateOldLanguagePlugin extends Plugin implements FrontEndable { } }; // ACTIONS - auto generated - generateTranslatorAction.setMenuBarData(new MenuData(new String[] { "File", - "Generate Simple Language Translator..." }, null, "Language")); + generateTranslatorAction.setMenuBarData(new MenuData( + new String[] { "File", "Generate Simple Language Translator..." }, null, "Language")); generateTranslatorAction.setEnabled(true); tool.addAction(generateTranslatorAction); @@ -176,17 +176,16 @@ public class GenerateOldLanguagePlugin extends Plugin implements FrontEndable { chooser.setApproveButtonText("Create"); // there's no single directory; you need to pick it yourself now // chooser.setCurrentDirectory(LANGUAGE_DIR); - chooser.setCurrentDirectory(Application.getApplicationRootDirectory().getFile( - false)); + chooser.setCurrentDirectory( + Application.getApplicationRootDirectory().getFile(false)); } File file = chooser.getSelectedFile(true); if (file == null) { return; } if (!file.getName().endsWith(OldLanguageFactory.OLD_LANGUAGE_FILE_EXT)) { - file = - new File(file.getParent(), file.getName() + - OldLanguageFactory.OLD_LANGUAGE_FILE_EXT); + file = new File(file.getParent(), + file.getName() + OldLanguageFactory.OLD_LANGUAGE_FILE_EXT); } if (file.exists()) { if (OptionDialog.showYesNoDialog(panel, "Confirm Overwrite", @@ -199,12 +198,11 @@ public class GenerateOldLanguagePlugin extends Plugin implements FrontEndable { OldLanguageFactory.createOldLanguageFile(lang, file); close(); - int resp = - OptionDialog.showYesNoDialog( - GenerateOldLanguagePlugin.this.tool.getToolFrame(), - "Create Simple Translator?", - "Old language file generated successfully.\n \n" - + "Would you like to create a simple translator to another language?"); + int resp = OptionDialog.showYesNoDialog( + GenerateOldLanguagePlugin.this.tool.getToolFrame(), + "Create Simple Translator?", + "Old language file generated successfully.\n \n" + + "Would you like to create a simple translator to another language?"); if (resp == OptionDialog.YES_OPTION) { GenerateTranslatorDialog translatorDlgProvider = new GenerateTranslatorDialog(lang, file); @@ -278,35 +276,33 @@ public class GenerateOldLanguagePlugin extends Plugin implements FrontEndable { chooser.setApproveButtonText("Create"); // there's no single directory; you need to pick it yourself now // chooser.setCurrentDirectory(LANGUAGE_DIR); - chooser.setCurrentDirectory(Application.getApplicationRootDirectory().getFile( - false)); + chooser.setCurrentDirectory( + Application.getApplicationRootDirectory().getFile(false)); } transFile = chooser.getSelectedFile(true); if (transFile == null) { return; } - if (!transFile.getName().endsWith( - LanguageTranslatorFactory.LANGUAGE_TRANSLATOR_FILE_EXT)) { - transFile = - new File(transFile.getParent(), transFile.getName() + - LanguageTranslatorFactory.LANGUAGE_TRANSLATOR_FILE_EXT); + if (!transFile.getName() + .endsWith(LanguageTranslatorFactory.LANGUAGE_TRANSLATOR_FILE_EXT)) { + transFile = new File(transFile.getParent(), transFile.getName() + + LanguageTranslatorFactory.LANGUAGE_TRANSLATOR_FILE_EXT); } } else { String filename = GenerateTranslatorDialog.this.oldLangFile.getName(); int index = filename.indexOf(OldLanguageFactory.OLD_LANGUAGE_FILE_EXT); if (index > 0) { - filename = - filename.substring(0, index) + - LanguageTranslatorFactory.LANGUAGE_TRANSLATOR_FILE_EXT; + filename = filename.substring(0, index) + + LanguageTranslatorFactory.LANGUAGE_TRANSLATOR_FILE_EXT; } - transFile = - new File(GenerateTranslatorDialog.this.oldLangFile.getParentFile(), - filename); + transFile = new File( + GenerateTranslatorDialog.this.oldLangFile.getParentFile(), filename); } if (transFile.exists()) { if (OptionDialog.showYesNoDialog(panel, "Confirm Overwrite", - "Overwrite file " + transFile.getName() + "?") != OptionDialog.YES_OPTION) { + "Overwrite file " + transFile.getName() + + "?") != OptionDialog.YES_OPTION) { return; } } @@ -353,12 +349,14 @@ public class GenerateOldLanguagePlugin extends Plugin implements FrontEndable { toLang.setText(newLang.getLanguageID().getIdAsString()); root.addContent(toLang); - for (CompilerSpecDescription oldCompilerSpecDescription : oldLang.getCompatibleCompilerSpecDescriptions()) { + for (CompilerSpecDescription oldCompilerSpecDescription : oldLang + .getCompatibleCompilerSpecDescriptions()) { CompilerSpecID oldCompilerSpecID = oldCompilerSpecDescription.getCompilerSpecID(); String newId; try { - newId = - newLang.getCompilerSpecByID(oldCompilerSpecID).getCompilerSpecID().getIdAsString(); + newId = newLang.getCompilerSpecByID(oldCompilerSpecID) + .getCompilerSpecID() + .getIdAsString(); } catch (CompilerSpecNotFoundException e) { newId = newLang.getDefaultCompilerSpec().getCompilerSpecID().getIdAsString(); @@ -398,16 +396,17 @@ public class GenerateOldLanguagePlugin extends Plugin implements FrontEndable { Register oldCtx = oldLang.getContextBaseRegister(); Register newCtx = newLang.getContextBaseRegister(); boolean contextWarning = false; - if (oldCtx != null && defaultTrans.isValueTranslationRequired(oldCtx)) { + if (oldCtx != Register.NO_CONTEXT && + defaultTrans.isValueTranslationRequired(oldCtx)) { contextWarning = true; } - else if (oldCtx == null && newCtx != null) { + else if (oldCtx == Register.NO_CONTEXT && newCtx != Register.NO_CONTEXT) { contextWarning = true; } if (contextWarning) { Msg.showWarn(getClass(), tool.getToolFrame(), "Translator Warning", - "The new context register differs from the old context!\n" - + "A set_context element or custom translator may be required."); + "The new context register differs from the old context!\n" + + "A set_context element or custom translator may be required."); } } } @@ -531,7 +530,8 @@ public class GenerateOldLanguagePlugin extends Plugin implements FrontEndable { } @Override - public List getLanguageDescriptions(boolean includeDeprecatedLanguages) { + public List getLanguageDescriptions( + boolean includeDeprecatedLanguages) { // Include deprecated languages List list = new ArrayList(); list.addAll(langService.getLanguageDescriptions(true)); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/program/util/ProgramMerge.java b/Ghidra/Features/Base/src/main/java/ghidra/program/util/ProgramMerge.java index 08ec6c12ee..3435c9ed7b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/program/util/ProgramMerge.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/program/util/ProgramMerge.java @@ -474,14 +474,14 @@ public class ProgramMerge implements PropertyVisitor { Address max = range.getMaxAddress(); Instruction instr = listing.getInstructionContaining(min); if (instr != null) { - instructionSet.add( - new AddressRangeImpl(instr.getMinAddress(), instr.getMaxAddress())); + instructionSet + .add(new AddressRangeImpl(instr.getMinAddress(), instr.getMaxAddress())); } InstructionIterator instIter = listing.getInstructions(new AddressSet(min, max), true); while (instIter.hasNext()) { instr = instIter.next(); - instructionSet.add( - new AddressRangeImpl(instr.getMinAddress(), instr.getMaxAddress())); + instructionSet + .add(new AddressRangeImpl(instr.getMinAddress(), instr.getMaxAddress())); } } return instructionSet; @@ -563,8 +563,8 @@ public class ProgramMerge implements PropertyVisitor { resultRange.getMaxAddress(), false); try { - if (resultContextReg != null) { - if (originContextReg != null) { + if (resultContextReg != Register.NO_CONTEXT) { + if (originContextReg != Register.NO_CONTEXT) { // Copy context register value mergeProgramContext(resultContext, originContext, originContext.getBaseContextRegister(), newOriginRange, resultRange, @@ -759,15 +759,16 @@ public class ProgramMerge implements PropertyVisitor { DisassemblerContextImpl context = new DisassemblerContextImpl(program.getProgramContext()); context.flowStart(addr); try { - InstructionPrototype proto = program.getLanguage().parse( - new DumbMemBufferImpl(program.getMemory(), addr), context, false); + InstructionPrototype proto = program.getLanguage() + .parse(new DumbMemBufferImpl(program.getMemory(), addr), context, false); return resultListing.createInstruction(addr, proto, new DumbMemBufferImpl(program.getMemory(), addr), new ProgramProcessorContext(program.getProgramContext(), addr)); } catch (Exception e) { - program.getBookmarkManager().setBookmark(addr, BookmarkType.ERROR, - Disassembler.ERROR_BOOKMARK_CATEGORY, "Diff/Merge applied bad instruction"); + program.getBookmarkManager() + .setBookmark(addr, BookmarkType.ERROR, Disassembler.ERROR_BOOKMARK_CATEGORY, + "Diff/Merge applied bad instruction"); } return null; } @@ -1251,8 +1252,8 @@ public class ProgramMerge implements PropertyVisitor { } ReferenceManager resultRM = resultProgram.getReferenceManager(); Reference[] resultRefs = resultRM.getReferencesFrom(resultCu.getMinAddress(), opIndex); - Reference[] originRefs = originProgram.getReferenceManager().getReferencesFrom( - originCu.getMinAddress(), opIndex); + Reference[] originRefs = originProgram.getReferenceManager() + .getReferencesFrom(originCu.getMinAddress(), opIndex); HashMap resultsToKeep = new HashMap<>(); // key=OriginRef, value=ResultRef // Determine the result references to keep that match the origin references. for (Reference originRef : originRefs) { diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/script/GhidraScriptTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/script/GhidraScriptTest.java index dd05284ae5..c8141cad34 100644 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/app/script/GhidraScriptTest.java +++ b/Ghidra/Features/Base/src/test.slow/java/ghidra/app/script/GhidraScriptTest.java @@ -52,10 +52,6 @@ public class GhidraScriptTest extends AbstractGhidraHeadedIntegrationTest { private Program program; private GhidraState state; - public GhidraScriptTest() { - super(); - } - @Before public void setUp() throws Exception { @@ -522,8 +518,10 @@ public class GhidraScriptTest extends AbstractGhidraHeadedIntegrationTest { // Try to set a valid option to an invalid value and verify that the invalid value was not stored. String invalidValue = "d"; script.setAnalysisOption(program, validOptionName, invalidValue); - assertFalse(script.getCurrentAnalysisOptionsAndValues(program).get(validOptionName).equals( - invalidValue)); + assertFalse(script.getCurrentAnalysisOptionsAndValues(program) + .get(validOptionName) + .equals( + invalidValue)); // Try to set an invalid option and verify that the option is not successfully set. String invalidOption = "invalidOption"; @@ -826,7 +824,7 @@ public class GhidraScriptTest extends AbstractGhidraHeadedIntegrationTest { //================================================================================================== // Inner Classes -//================================================================================================== +//================================================================================================== public enum TestEnum { a, b, c diff --git a/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ProgramByteViewerComponentProvider.java b/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ProgramByteViewerComponentProvider.java index b7dc9b7f76..6fcdfaa71e 100644 --- a/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ProgramByteViewerComponentProvider.java +++ b/Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ProgramByteViewerComponentProvider.java @@ -162,7 +162,7 @@ public class ProgramByteViewerComponentProvider extends ByteViewerComponentProvi @Override public String getTextSelection() { - return getTextSelection(); + return getCurrentTextSelection(); } private void setSelection(ProgramSelection selection, boolean notify) { @@ -433,8 +433,7 @@ public class ProgramByteViewerComponentProvider extends ByteViewerComponentProvi } /** - * Called when the memory in the current program changes, from the domain - * object listener. + * Called when the memory in the current program changes, from the domain object listener. */ void memoryConfigurationChanged() { ProgramLocation location = currentLocation; @@ -519,6 +518,7 @@ public class ProgramByteViewerComponentProvider extends ByteViewerComponentProvi /** * Gets the text of the current {@link ProgramSelection} + * * @return the text */ String getCurrentTextSelection() { diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/SleighAssembler.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/SleighAssembler.java index 3a561afc86..c2b2c32487 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/SleighAssembler.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/SleighAssembler.java @@ -195,7 +195,7 @@ public class SleighAssembler implements Assembler { throw new AssemblyError( "Context must be fully-specified (full length, no shift, no unknowns)"); } - if (lang.getContextBaseRegister() != null && + if (lang.getContextBaseRegister() != Register.NO_CONTEXT && ctx.length() < lang.getContextBaseRegister().getMinimumByteSize()) { throw new AssemblyError( "Context must be fully-specified (full length, no shift, no unknowns)"); diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyDefaultContext.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyDefaultContext.java index cf8a7f6700..2fac8340dc 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyDefaultContext.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyDefaultContext.java @@ -57,7 +57,7 @@ public class AssemblyDefaultContext implements DisassemblerContext, DefaultProgr this.lang = lang; this.at = at; Register ctxreg = lang.getContextBaseRegister(); - if (null == ctxreg) { + if (ctxreg == Register.NO_CONTEXT) { this.defctx = AssemblyPatternBlock.nop(); this.curctx = AssemblyPatternBlock.nop(); } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighDebugLogger.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighDebugLogger.java index 7eeaec4132..38d531faf6 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighDebugLogger.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/sleigh/SleighDebugLogger.java @@ -90,7 +90,7 @@ public class SleighDebugLogger { ContextCache contextCache = new ContextCache(); contextBaseRegister = language.getContextBaseRegister(); - if (contextBaseRegister != null) { + if (contextBaseRegister != Register.NO_CONTEXT) { contextCache.registerVariable(contextBaseRegister); } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/emulate/Emulate.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/emulate/Emulate.java index 97387d9702..ec6a2329e1 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/emulate/Emulate.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/emulate/Emulate.java @@ -101,8 +101,8 @@ public class Emulate { @SuppressWarnings("unchecked") private void initInstuctionStateModifier() { - String classname = language.getProperty( - GhidraLanguagePropertyKeys.EMULATE_INSTRUCTION_STATE_MODIFIER_CLASS); + String classname = language + .getProperty(GhidraLanguagePropertyKeys.EMULATE_INSTRUCTION_STATE_MODIFIER_CLASS); if (classname == null) { return; } @@ -245,7 +245,7 @@ public class Emulate { */ public RegisterValue getContextRegisterValue() { Register contextReg = language.getContextBaseRegister(); - if (contextReg == null) { + if (contextReg == Register.NO_CONTEXT) { return null; } if (pseudoInstruction != null) { diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/emulate/EmulateDisassemblerContext.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/emulate/EmulateDisassemblerContext.java index 4f843e3c1b..7d330c7f3e 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/emulate/EmulateDisassemblerContext.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcode/emulate/EmulateDisassemblerContext.java @@ -58,7 +58,7 @@ public class EmulateDisassemblerContext implements DisassemblerContext { public void setCurrentAddress(Address addr) { - if (contextReg == null) { + if (contextReg == Register.NO_CONTEXT) { return; } RegisterValue partialValue = null; @@ -99,7 +99,7 @@ public class EmulateDisassemblerContext implements DisassemblerContext { } private void initContext() { - if (contextReg == null) { + if (contextReg == Register.NO_CONTEXT) { return; } flowingContextRegisterMask = contextReg.getBaseMask().clone(); @@ -203,8 +203,7 @@ public class EmulateDisassemblerContext implements DisassemblerContext { } @Override - public void setFutureRegisterValue(Address fromAddr, Address toAddr, - RegisterValue value) { + public void setFutureRegisterValue(Address fromAddr, Address toAddr, RegisterValue value) { throw new UnsupportedOperationException(); } } diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java index c7b62cced7..e9693cf110 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java @@ -819,8 +819,8 @@ public class ProgramDB extends DomainObjectAdapterDB implements Program, ChangeM * @param oldValue the old datatype. * @param newValue the new datatype. */ - public void dataTypeChanged(long dataTypeID, int type, boolean isAutoChange, - Object oldValue, Object newValue) { + public void dataTypeChanged(long dataTypeID, int type, boolean isAutoChange, Object oldValue, + Object newValue) { // TODO: do not need to record type changes for packed composite change which is in repsonse // to component size or alignment change. if (recordChanges && !isAutoChange) { @@ -2174,7 +2174,7 @@ public class ProgramDB extends DomainObjectAdapterDB implements Program, ChangeM ProgramContext context = getProgramContext(); Register contextReg = context.getBaseContextRegister(); - if (contextReg == null) { + if (contextReg == Register.NO_CONTEXT) { return; } Register thumbBitReg = context.getRegister("TMode"); diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java index f4a9215952..25309e09e0 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/code/CodeManager.java @@ -472,8 +472,11 @@ public class CodeManager implements ErrorHandler, ManagerDB { if (prototype.hasDelaySlots()) { // perform bounds check on entire delay slot instruction group try { - endAddr = startAddr.addNoWrap(prototype.getFallThroughOffset( - protoInstr.getInstructionContext())).previous(); + endAddr = + startAddr + .addNoWrap(prototype.getFallThroughOffset( + protoInstr.getInstructionContext())) + .previous(); } catch (AddressOverflowException e) { break; @@ -553,9 +556,10 @@ public class CodeManager implements ErrorHandler, ManagerDB { InstructionPrototype prototype = lastInstruction.getPrototype(); if (prototype.hasDelaySlots()) { try { - maxAddr = lastInstruction.getAddress().addNoWrap( - prototype.getFallThroughOffset( - lastInstruction.getInstructionContext())).previous(); + maxAddr = lastInstruction.getAddress() + .addNoWrap(prototype.getFallThroughOffset( + lastInstruction.getInstructionContext())) + .previous(); } catch (AddressOverflowException e) { // ignore @@ -630,7 +634,7 @@ public class CodeManager implements ErrorHandler, ManagerDB { prototype = protoMgr.getPrototype(protoID); Register contextReg = contextMgr.getBaseContextRegister(); - if (contextReg != null) { + if (contextReg != Register.NO_CONTEXT) { try { RegisterValue contextValue = context.getRegisterValue(contextReg); Address start = address; @@ -2989,8 +2993,8 @@ public class CodeManager implements ErrorHandler, ManagerDB { boolean isFallthrough = (flowType.isJump() && flowAddr.equals(inst.getMaxAddress().next())); if (!isFallthrough) { - mnemonicPrimaryRef = addDefaultMemoryReferenceIfMissing(inst, Reference.MNEMONIC, - flowAddr, flowType, oldRefList, mnemonicPrimaryRef); + mnemonicPrimaryRef = addDefaultMemoryReferenceIfMissing(inst, + Reference.MNEMONIC, flowAddr, flowType, oldRefList, mnemonicPrimaryRef); } } } @@ -3020,8 +3024,8 @@ public class CodeManager implements ErrorHandler, ManagerDB { * @param operandPrimaryRef current preferred primary reference for operand * @return updated preferred primary address for operand (i.e., operandPrimaryRef) */ - private Reference addDefaultMemoryReferenceIfMissing(Instruction inst, - int opIndex, Address refAddr, RefType refType, List oldRefList, + private Reference addDefaultMemoryReferenceIfMissing(Instruction inst, int opIndex, + Address refAddr, RefType refType, List oldRefList, Reference operandPrimaryRef) { Reference ref = removeOldReference(oldRefList, refAddr, opIndex, refType); diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/register/OldProgramContextDB.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/register/OldProgramContextDB.java index 03ae2f5960..147f371be1 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/register/OldProgramContextDB.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/register/OldProgramContextDB.java @@ -86,10 +86,6 @@ public class OldProgramContextDB implements ProgramContext, DefaultProgramContex valueMaps = new HashMap<>(); baseContextRegister = language.getContextBaseRegister(); - if (baseContextRegister == null) { - baseContextRegister = new Register("DEFAULT_CONTEXT", "DEFAULT_CONTEXT", - addrMap.getAddressFactory().getRegisterSpace().getAddress(0x0), 4, true, 0); - } defaultDisassemblyContext = new RegisterValue(baseContextRegister); initializeDefaultValues(language); diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/register/ProgramRegisterContextDB.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/register/ProgramRegisterContextDB.java index 5c8ed742d2..f0f914fcee 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/register/ProgramRegisterContextDB.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/register/ProgramRegisterContextDB.java @@ -88,8 +88,7 @@ public class ProgramRegisterContextDB extends AbstractStoredProgramContext imple return false; } - private void upgrade(AddressMap addressMapExt, TaskMonitor monitor) - throws CancelledException { + private void upgrade(AddressMap addressMapExt, TaskMonitor monitor) throws CancelledException { OldProgramContextDB oldContext = new OldProgramContextDB(dbHandle, errorHandler, language, addressMapExt, lock); @@ -358,7 +357,7 @@ public class ProgramRegisterContextDB extends AbstractStoredProgramContext imple // May need to fill-in blank context areas with a new specified context value Register ctxReg = newLanguage.getContextBaseRegister(); - if (ctxReg != null && translator.isValueTranslationRequired(ctxReg)) { + if (ctxReg != Register.NO_CONTEXT && translator.isValueTranslationRequired(ctxReg)) { RegisterValue gapValue = new RegisterValue(ctxReg); gapValue = translator.getNewRegisterValue(gapValue); if (gapValue != null && gapValue.hasAnyValue()) { diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/Language.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/Language.java index 0e900d125c..2eb334492d 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/Language.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/Language.java @@ -254,7 +254,7 @@ public interface Language { /** * Returns processor context base register or null if one has not been defined by the * language. - * @return base context register or null if not defined + * @return base context register or Register.NO_CONTEXT if not defined */ public Register getContextBaseRegister(); diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/Register.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/Register.java index 1af3d35e09..aad9190d5f 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/Register.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/Register.java @@ -43,8 +43,9 @@ public class Register implements java.io.Serializable, Comparable { /** Register can be used in SIMD operations **/ public final static int TYPE_VECTOR = 128; - public final static Register DEFAULT_CONTEXT = - new Register("DEFAULT_CONTEXT", "DEFAULT_CONTEXT", Address.NO_ADDRESS, 4, true, 0); + /** Register used to denote NO defined context for a language **/ + public final static Register NO_CONTEXT = + new Register("NO_CONTEXT", "NO_CONTEXT", Address.NO_ADDRESS, 4, true, 0); private String name; private String description; // description of the register 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 65072c8ca4..8beac43323 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 @@ -127,7 +127,7 @@ public class RegisterManager { } // if there is no context register, force a default one if (contextBaseRegister == null) { - contextBaseRegister = Register.DEFAULT_CONTEXT; + contextBaseRegister = Register.NO_CONTEXT; } // handle the register size 0 case; Collections.reverse(registerListSortedBySize); diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/InstructionUtils.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/InstructionUtils.java index 7101357b63..a05e71b03d 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/InstructionUtils.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/InstructionUtils.java @@ -50,8 +50,8 @@ public class InstructionUtils { FlowType flowType = instruction.getFlowType(); textBuf.append("\nFlow Type : " + flowType.toString()); FlowOverride flowOverride = instruction.getFlowOverride(); - if (flowOverride != FlowOverride.NONE && - instruction.getPrototype().getFlowType(instruction.getInstructionContext()) != flowType) { + if (flowOverride != FlowOverride.NONE && instruction.getPrototype() + .getFlowType(instruction.getInstructionContext()) != flowType) { textBuf.append("\n >>> reflects " + flowOverride + " flow override"); } Address fallAddr = instruction.getFallThrough(); @@ -62,20 +62,20 @@ public class InstructionUtils { textBuf.append("\nDelay slot depth : " + instruction.getDelaySlotDepth() + (instruction.isInDelaySlot() ? " in slot" : "")); textBuf.append( - "\nHash : " + Integer.toHexString(instruction.getPrototype().hashCode())).append( - '\n'); + "\nHash : " + Integer.toHexString(instruction.getPrototype().hashCode())) + .append('\n'); textBuf.append("\nInput Objects:\n" + getString(getFormatedInstructionObjects(instruction, true), true)); textBuf.append("\nResult Objects:\n" + getString(getFormatedInstructionObjects(instruction, false), true)); textBuf.append( - "\nConstructor Line #'s:\n" + getString(debug.getConstructorLineNumbers(), true)).append( - '\n'); + "\nConstructor Line #'s:\n" + getString(debug.getConstructorLineNumbers(), true)) + .append('\n'); textBuf.append("\nByte Length : " + instruction.getLength()); try { - textBuf.append("\nInstr Bytes : " + - SleighDebugLogger.getFormattedBytes(instruction.getBytes())); + textBuf.append( + "\nInstr Bytes : " + SleighDebugLogger.getFormattedBytes(instruction.getBytes())); textBuf.append("\nMask : " + debug.getFormattedInstructionMask(-1)); textBuf.append("\nMasked Bytes: " + debug.getFormattedMaskedValue(-1)).append('\n'); } @@ -93,10 +93,11 @@ public class InstructionUtils { * @param instr * @return formatted context data */ - public static String getFormattedContextRegisterValueBreakout(Instruction instr, String indent) { + public static String getFormattedContextRegisterValueBreakout(Instruction instr, + String indent) { ProgramContext programContext = instr.getProgram().getProgramContext(); Register contextReg = programContext.getBaseContextRegister(); - if (contextReg == null) { + if (contextReg == Register.NO_CONTEXT) { return indent + "[Instruction context not defined]"; } return getFormattedRegisterValueBits(instr.getRegisterValue(contextReg), indent); diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/LanguageTranslatorAdapter.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/LanguageTranslatorAdapter.java index 8ed01f71b2..fd9b6d0ff3 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/LanguageTranslatorAdapter.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/LanguageTranslatorAdapter.java @@ -425,9 +425,9 @@ public abstract class LanguageTranslatorAdapter implements LanguageTranslator { return false; } Register newContextReg = getNewLanguage().getContextBaseRegister(); - if (newContextReg != null) { + if (newContextReg != Register.NO_CONTEXT) { Register oldContextReg = getOldLanguage().getContextBaseRegister(); - if (oldContextReg == null || + if (oldContextReg == Register.NO_CONTEXT || !isSameRegisterConstruction(oldContextReg, newContextReg)) { Msg.error(this, "Translator can not map context register: " + this); return false; diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/OldLanguageFactory.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/OldLanguageFactory.java index 1c9b06ae51..2a1a784655 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/OldLanguageFactory.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/OldLanguageFactory.java @@ -143,8 +143,8 @@ public class OldLanguageFactory { langSvc.getLanguageDescription(oldLang.getLanguageID()); if (curDescr.getVersion() <= oldDescr.getVersion()) { // Ignore old versions which are inappropriate - log.warn("WARNING! Ignoring old language spec, version still exists: " + - oldLang); + log.warn( + "WARNING! Ignoring old language spec, version still exists: " + oldLang); continue; } } @@ -208,8 +208,8 @@ public class OldLanguageFactory { * @throws IOException if file error occurs * @throws LanguageNotFoundException if lang is unknown to DefaultLanguageService */ - public static void createOldLanguageFile(Language lang, File file) throws IOException, - LanguageNotFoundException { + public static void createOldLanguageFile(Language lang, File file) + throws IOException, LanguageNotFoundException { LanguageService languageService = DefaultLanguageService.getLanguageService(); if (lang instanceof OldLanguage) { @@ -272,7 +272,7 @@ public class OldLanguageFactory { Register contextReg = lang.getContextBaseRegister(); Element registersElement = new Element("registers"); - if (contextReg != null) { + if (contextReg != Register.NO_CONTEXT) { Element ctxElement = getRegisterElement(contextReg); int contextBitLength = contextReg.getBitLength(); for (Register bitReg : contextReg.getChildRegisters()) { diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleLanguageTranslator.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleLanguageTranslator.java index e4de54ea86..f0f64cad69 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleLanguageTranslator.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/util/SimpleLanguageTranslator.java @@ -160,7 +160,7 @@ class SimpleLanguageTranslator extends LanguageTranslatorAdapter { return super.getNewRegisterValue(oldRegisterValue); } Register newContextReg = getNewLanguage().getContextBaseRegister(); - if (newContextReg == null || (clearAllContext && contextSettings == null)) { + if (newContextReg == Register.NO_CONTEXT || (clearAllContext && contextSettings == null)) { return null; } RegisterValue newValue = null; @@ -220,8 +220,8 @@ class SimpleLanguageTranslator extends LanguageTranslatorAdapter { LanguagePostUpgradeInstructionHandler.class.getName()); } Constructor constructor = handlerClass.getConstructor(new Class[] { Program.class }); - return (LanguagePostUpgradeInstructionHandler) constructor.newInstance( - new Object[] { program }); + return (LanguagePostUpgradeInstructionHandler) constructor + .newInstance(new Object[] { program }); } @Override