From 72d6b1513305591928010dc7da36115b6cae0845 Mon Sep 17 00:00:00 2001 From: caheckman <48068198+caheckman@users.noreply.github.com> Date: Thu, 23 Jan 2020 17:08:28 -0500 Subject: [PATCH] Last chance attempt to find LOAD/STORE --- .../Features/Decompiler/src/decompile/cpp/architecture.cc | 5 +++-- .../Features/Decompiler/src/decompile/cpp/coreaction.cc | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/architecture.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/architecture.cc index 28f2db2cc2..359f3867c8 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/architecture.cc +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/architecture.cc @@ -1087,9 +1087,10 @@ void Architecture::parseProcessorConfig(DocumentStorage &store) parseLaneSizes(*iter); } else if (elname == "data_space") { - AddrSpace *spc = getSpaceByName(el->getAttributeValue("space")); + const string &spaceName( (*iter)->getAttributeValue("space")); + AddrSpace *spc = getSpaceByName(spaceName); if (spc == (AddrSpace *)0) - throw LowlevelError("Undefined space: "+el->getAttributeValue("space")); + throw LowlevelError("Undefined space: "+spaceName); setDefaultDataSpace(spc->getIndex()); } else if (elname == "segmented_address") { diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/coreaction.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/coreaction.cc index 4ad61eaac8..cdc12218c0 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/coreaction.cc +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/coreaction.cc @@ -964,6 +964,14 @@ AddrSpace *ActionConstantPtr::searchForLoadStore(Varnode *vn,PcodeOp *op) } if (op == (PcodeOp *)0) break; } + for(list::const_iterator iter=vn->beginDescend();iter!=vn->endDescend();++iter) { + op = *iter; + OpCode opc = op->code(); + if (opc == CPUI_LOAD) + return Address::getSpaceFromConst(op->getIn(0)->getAddr()); + else if (opc == CPUI_STORE && op->getIn(1) == vn) + return Address::getSpaceFromConst(op->getIn(0)->getAddr()); + } return (AddrSpace *)0; }