diff --git a/Ghidra/Features/Base/src/main/java/ghidra/util/table/field/ReferenceCountToAddressTableColumn.java b/Ghidra/Features/Base/src/main/java/ghidra/util/table/field/ReferenceCountToAddressTableColumn.java index 645f3643db..16bb0b41e9 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/util/table/field/ReferenceCountToAddressTableColumn.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/util/table/field/ReferenceCountToAddressTableColumn.java @@ -4,9 +4,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -40,6 +40,12 @@ public class ReferenceCountToAddressTableColumn extends @Override public Integer getValue(Address rowObject, Settings settings, Program pgm, ServiceProvider serviceProvider) throws IllegalArgumentException { + + if (rowObject.isStackAddress() || rowObject.isRegisterAddress()) { + // the ReferenceManager will throw an exception if we pass this address + return 0; + } + ReferenceManager referenceManager = pgm.getReferenceManager(); int referenceCount = referenceManager.getReferenceCountTo(rowObject); if (referenceCount != 0) { diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/ReDisassembler.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/ReDisassembler.java index c4d9fbaa8b..d30d887919 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/ReDisassembler.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/disassemble/ReDisassembler.java @@ -4,9 +4,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -21,7 +21,8 @@ import ghidra.app.util.PseudoInstruction; import ghidra.program.model.address.*; import ghidra.program.model.lang.*; import ghidra.program.model.listing.*; -import ghidra.program.model.mem.*; +import ghidra.program.model.mem.DumbMemBufferImpl; +import ghidra.program.model.mem.MemBuffer; import ghidra.program.model.util.CodeUnitInsertionException; import ghidra.program.util.ProgramContextImpl; import ghidra.util.Msg; @@ -85,8 +86,7 @@ public class ReDisassembler { protected class ReDisState { protected final TaskMonitor monitor; - protected final MemBuffer progMemBuffer = - new DumbMemBufferImpl(program.getMemory(), program.getMemory().getMinAddress()); + protected final Map progMemBuffers = new HashMap<>(); protected final ProgramContext tempContext = new ProgramContextImpl(language); protected final AddressSet visited = new AddressSet(); protected final Deque queue = new LinkedList<>(); @@ -121,8 +121,9 @@ public class ReDisassembler { } protected MemBuffer createBuffer(Address at) { - return new WrappedMemBuffer(progMemBuffer, 20, - (int) at.subtract(progMemBuffer.getAddress())); + return progMemBuffers.computeIfAbsent(at.getAddressSpace(), space -> { + return new DumbMemBufferImpl(program.getMemory(), space.getMinAddress()); + }); } /** diff --git a/Ghidra/Processors/Toy/certification.manifest b/Ghidra/Processors/Toy/certification.manifest index 4491cd011a..cf44180f39 100644 --- a/Ghidra/Processors/Toy/certification.manifest +++ b/Ghidra/Processors/Toy/certification.manifest @@ -19,6 +19,7 @@ data/languages/toy64-long8.cspec||GHIDRA||||END| data/languages/toy64.cspec||GHIDRA||||END| data/languages/toy64_be.slaspec||GHIDRA||||END| data/languages/toy64_be_harvard.slaspec||GHIDRA||||END| +data/languages/toy64_be_harvard_rev.slaspec||GHIDRA||||END| data/languages/toy64_le.slaspec||GHIDRA||||END| data/languages/toyInstructions.sinc||GHIDRA||||END| data/languages/toyPosStack.cspec||GHIDRA||||END| diff --git a/Ghidra/Processors/Toy/data/languages/toy.ldefs b/Ghidra/Processors/Toy/data/languages/toy.ldefs index 7bd3ec76cd..fee62d447a 100644 --- a/Ghidra/Processors/Toy/data/languages/toy.ldefs +++ b/Ghidra/Processors/Toy/data/languages/toy.ldefs @@ -79,6 +79,17 @@ Toy (test) processor 64-bit big-endian Harvard + + Toy (test) processor 64-bit big-endian Harvard + +