diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/printc.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/printc.cc index b2637c1a59..25afd2e439 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/printc.cc +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/printc.cc @@ -1832,6 +1832,8 @@ void PrintC::pushSymbol(const Symbol *sym,const Varnode *vn,const PcodeOp *op) tokenColor = EmitMarkup::global_color; else if (sym->getCategory() == Symbol::function_parameter) tokenColor = EmitMarkup::param_color; + else if (sym->getCategory() == Symbol::equate) + tokenColor = EmitMarkup::const_color; else tokenColor = EmitMarkup::var_color; pushSymbolScope(sym); diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/ruleaction.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/ruleaction.cc index aee58417cd..55a3bdd579 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/ruleaction.cc +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/ruleaction.cc @@ -7234,11 +7234,13 @@ int4 RuleSubNormal::applyOp(PcodeOp *op,Funcdata &data) if (!shiftop->getIn(1)->isConstant()) return 0; Varnode *a = shiftop->getIn(0); if (a->isFree()) return 0; + Varnode *outvn = op->getOut(); + if (outvn->isPrecisHi() || outvn->isPrecisLo()) return 0; int4 n = shiftop->getIn(1)->getOffset(); int4 c = op->getIn(1)->getOffset(); int4 k = (n/8); int4 insize = a->getSize(); - int4 outsize = op->getOut()->getSize(); + int4 outsize = outvn->getSize(); // Total shift + outsize must be greater equal to size of input if ((n+8*c+8*outsize < 8*insize)&&(n != k*8)) return 0;